Python 공부기록

Python _ 수박수박수박수박수?

혜원89 2021. 3. 9. 21:19

문제 설명

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

제한 조건

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

입출력 예

n return
3 "수박수"
4 "수박수박"

✅SOL_1

 

1
2
3
4
5
6
7
8
def solution(n): 
    a = ''
    for i in range(1, n+1):
        if i % 2 == 1:
            a = a + '수'
        elif i % 2 == 0:
            a = a + '박'
    return a
cs

 

내가 풀었지만 별로 좋은 코드는 아니다.. SOL_2와 비교하면 쓸모없는 구문들이 많이 쓰였다. 그래도 알아보자면, 값을 저장할 문자열 변수 a를 선언한다. for문을 통해 1부터 입력된 수 n까지 '수' 또는 '박'을 저장하기 위해 < range(1, n+1) >이라 작성한다. for문 안에서 if문을 통해 반복문 변수 i가 홀수인지 짝수인지 검사한다. 이때도 i는 홀수가 아니면 짝수일 경우 밖에 없으니 if-else로 쓰면 더 간단한데, 굳이 if-elif로 두 가지 조건을 검사했다. (과거의 나..) 아무튼 그렇게 검사를 통해 홀수번째이면 '수'를 짝수번째이면 '박'을 문자열 a에 저장한다. 저 구문도 < a += '수' >라고 쓰면 불필요한 글자를 줄일 수 있다. 이렇게 1부터 n까지 문자열 a를 채우고 return 한다. 

 

 

✅SOL_2

 

1
2
3
4
5
def solution(n):
    answer = '수박' * (n//2)
    if n % 2 == 1:
        answer += '수'
    return answer
cs

 

SOL_1보다 효율적인 코드이다. 먼저 문제를 조금만 더 생각해보면 1부터 n까지 값을 하나하나 검사하며 '수'와 '박'을 각각 문자열에 입력하지 않아도 된다. 즉, for문을 작성할 필요가 없다.  n이 어떤 값이던 '수박'은 n을 2로 나눈 몫인 < n//2 >번 들어간다.  그리고 n의 홀짝여부에 따라 홀수이면 맨 뒤에 '수'만 추가해주면 된다. 만약 n이 4이면 '수박'을 묶어서 생각하면 2번 들어간다 "수박수박". n이 7이면 '수박'은 3번 들어가고 맨 뒤에  '수'가 추가된다 "수박수박수박수'. 이렇게 생각하니 간단한 if문만 사용하여 코드를 작성할 수 있다.