코딩 테스트/Python

[프로그래머스 코딩테스트 연습] 3. 문자열 리턴 (수박수박수~)

알밤바 2022. 2. 11. 09:00
728x90
반응형

2번째 코딩 테스트 풀잎스쿨을 진행하였다. 화요일에 비해 훨씬 어려워진 느낌이랄까...

파이썬 공부의 필요성을 온몸으로 느끼는 중이다.....💦

 

코딩테스트 연습 - 수박수박수박수박수박수?

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

programmers.co.kr


1) 문제 설명

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

 

2) 제한 조건

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

 

3) 입출력 예


1. 문제 접근방식

짝수, 홀수로 나누어 for문, if문을 사용해야겠다는 것은 알았지만 이것을 코드로 구현하는 것까지는 하지 못하였다.

마침 다른 분이 작성하신 풀이 코드를 보는데, 딱 내가 구현하고 싶은대로 코드를 짜셔서 호다닥 들고와봤다...ㅎ

 

2. 풀이코드

(1) 내가 원했던 코드

def solution(n):
    answer = ''
    for i in range(n):
        if i % 2 == 0:      # i가 짝수일 때
            answer = answer + '수'
        else:               # i가 홀수일 때
            answer = answer + '박'
    return answer

n = 1일 때, i = 0이 되므로 대입해보면 → 수

n = 2일 때, i = 0, 1이 되므로 하나씩 대입해보면 → 수박

n = 3일 때, i = 0, 1, 2가 되므로 하나씩 대입해보면 → 수박수

n = 4일 때, i = 0, 1, 2, 3이 되므로 하나씩 대입해보면 → 수박수박

 

(2) 다른 풀이코드_1

def solution(n):
    answer = '수박'* n
    return answer[:n]

문자열에 곱하기(*)를 하면 반복이 된다는 것을 활용한 코드이다. 문자열을 반복을 한 후에 슬라이싱을 이용하여 n번째 자리까지의 값을 출력해낸다.

n = 1일 때, 수박이 되고 [:1]까지라면 → 수

n = 2일 때, 수박수박이 되고 [:2]까지라면 → 수박

n = 3일 때, 수박수박수박이 되고 [:3]까지라면 → 수박수

n = 4일 때, 수박수박수박수박이 되고 [:4]까지라면 → 수박수박

 

해당 코드에서의 문제점은 바로 answer값이 길어지게 되니 용량이 많아진다.

그렇기에 이것을 해결하기 위한 코드는 다음과 같다.

 

(3) 다른 풀이코드_2

def solution(n):
    answer = ('수박'*((n+1)//2))[:n]
    return answer

위의 코드와 '슬라이싱'을 한 부분은 동일하다. 하지만 문자열 반복 부분에서 다른 것을 알 수 있다.

n = 1일 때, 수박*1→ 수박[:1] → 수

n = 2일 때, 수박*1 → 수박[:2] → 수박

n = 3일 때, 수박*2 → 수박수박[:3] → 수박수

n = 4일 때, 수박*2 → 수박수박[:4] → 수박수박

 

확실히 위의 코드와 다르게 슬라이싱 전 문자열의 길이가 짧은 것을 알 수 있다.

 

3. 배운 점

어떠한 출력값을 내기 위한 코드를 구현하는 것만 생각하고 있었는데, 이번 코딩문제와 조원분들을 통해서 '좋은 코드'라는 것에 대해 알게 되었고 생각해보게 되었다. 단순히 코드를 구현하는 것이 아니라 여러 가지 요소를 고려하여 '좋은 코드'를 구현하는 것이 더 중요한 것이라는 것을 깨닫게 되었다. :)

728x90
반응형