codekata

[프로그래머스] #31 수박수박수? (방법3가지)

kinggoddino 2024. 7. 31.

▶ 문제

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution 만들기.

ex) n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴

 

▶ 제한조건

n은 길이 10,000이하인 자연수

 

▶ 풀이

def solution(n):
    answer = ''
    for i in range(n):
        if i % 2 == 0:
            answer += "수"
        else:
            answer += "박"    
    return answer

오예 통과!

 

+

다른 풀이들도 신기한게 있어서 훔쳐봤다.

방법1) 

def solution(n):
    return "".join("수박"[i%2] for i in range(n))

내가 한거랑 똑같은 방법인데 엄청 깔끔하다!

수박이 어차피 두글자라서, i를 홀짝으로 나눈 결과를 인덱싱으로 적용할 수 있다.

그리고 나처럼 빈 문자열에 하나씩 더할 게 아니라

"".join 을 통해 공백으로 묶어줄 수 있다

 

 

방법2)

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

문자열에도 곱셈 되니깐 단어 일단 만들어놓고 슬라이싱해버리기

천재다

문자열 곱셈은 엄청 빠르다!

내가 한것보다 시간 훨씬 조금 걸린다ㅜ (빨강이 내가한거)

내가 만든 코드는 문자열을 추가하는 연산을 for문으로 돌려서, 매번 새로운 문자열을 생성하고 있기 때문에 시간도 오래걸리는 것 같다..

 

여기서 '수박'이 두 글자니까 n 만큼 곱할게 아니라 (n//2 + 1) 만큼만 곱해도 된다.

근데 n 일때나 (n//2 + 1) 일때나 테스트 해봤는데 시간에 별 차이는 없었다.

파이썬에서는 문자열 곱셈 연산이 최적화되어 있어서 매우 빠르게 수행되기 때문인 것 같다.

 

 

방법3)

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

방금 내가 하려던 것처럼 딱 필요한 글자만큼만 출력한거다.

홀수인 경우를 % 연산자로 따로 빼서 "수" 한글자를 더해준다.

진짜 천재..