[프로그래머스] Lv1. 수박수박수박수

최대 1 분 소요

문제

길이가 n이고, “수박수박수박수….”와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 “수박수박”을 리턴하고 3이라면 “수박수”를 리턴하면 됩니다.

제한 조건

  • n은 길이 10,000이하인 자연수입니다.

나의 풀이:

def solution(n):
    if n % 2 == 0:
        return int(n/2)*'수박'
    else:
        return n//2*'수박'+'수'

if-else를 사용한 아주 기초적인 풀이. 시간복잡도는 O(1)이기 때문에 여기서 더 개선을 하지 않아도 되겠다는 마음으로 제출을 했다. 그러나…

다른 사람들의 풀이

def solution(n):
    s = "수박" * n
    return s[:n]

if-else를 쓰는 대신 인덱싱을 활용해서 이렇게 더 직관적으로 코드를 작성하는 방법이 존재했다.

다만, 아주 큰 차이는 아니지만 예를 들어 n이 5일 경우 우리가 필요한 건 ‘수박수박수’ 5개의 문자를 가진 문자열이지만 풀이과정에서 ‘수박수박수박수박수박’ 이라는 2배 길이의 문자열을 생성하기 때문에 n이 커질수록 불필요한 메모리 할당이 커진다는 지적도 있었다.

그래봤자 여전히 아주 간단한 문제라서 n이 10,000이 되더라도 성능에 큰 차이는 없었다. 이런 경우라면 성능 효율화보다 개발자 사이에서 더 직관적인 코드를 작성하는 선택을 할 수도 있을 것 같다.


그리고 위와는 다른 방식이지만 나의 코드를 더 간단하게 만드는 방법이라면 아래와 같이 코드를 훨씬 더 짧게 정리하여 작성할 수도 있다.

def solution(n):
    return "수박"*(n//2) + "수"*(n%2)

댓글남기기