본문 바로가기
알고리즘/프로그래머스

[python] 수박수박수박수박수박수? (연습문제)

by 민-Zero 2020. 3. 30.

문제의 목표는 간단하다. "수박수박수박..."의 패턴의 문자열을 길이 n에 맞추어 반환하면 된다. 만약 n=3이라면 길이가 3이 되도록 "수박수"를 반환하고 n=5라면 "수박수박수"로 반환하면 된다.

 

설계 및 구현

구현을 위해 주어진 함수는 패턴의 길이를 입력받을 매개변수 n을 가지고 있는 간단한 함수이다. 구현 내용은 "수박"이라는 문자열이 반복된다고 생각하면 된다. 이때 입력받은 길이 n이 짝수라면 그대로 출력하면 되지만 홀수일 경우에는 마지막에 "수박"에서 "수"부분만 출력되도록 하면 된다. 따라서 짝, 홀수 모든 경우를 동시에 처리하기 위해 입력받은 길이에 "수박"의 문자열 한 패턴만 더 붙이고 입력받은 길이만큼만 반환해주면 자동적으로 패턴만큼 잘리게 된다.

정리하면

① 홀수일 때도 같이 처리하기 위해 입력받은 길이에 "수박"만큼 더 붙여 생성 

② 길게 생성한 문자열을 입력받은 길이만큼 슬라이싱하여 반환

 

①을 만족하는 문자열을 생성하기 위해 "수박"*(n//2 + 1)을 수행하였다. 패턴 문자열이 길이를 2만큼 가지고 있으므로 문자열을 몇 번 붙여야 하는지는 2로 나누면 몇 번의 횟수만큼 이어야 하는지 얻을 수 있다.  짝수일 때는 +1을 수행하지 않아도 되지만 홀수의 과정도 동시에 처리하기 위해 +1을 붙여 반환해야 할 길이보다 길게 "수박"을 한 번 더 붙여준다.

② 생성한 문자열을 입력받은 길이만큼 반환해야 하기 때문에 [:n]의 슬라이싱 과정을 통해 첫 부분부터 원하는 길이만큼 출력한다. 슬라이싱을 진행할 때 인덱스 번호는 0번부터 시작하고 마지막 부분은 포함되지 않는 0<= <n의 부등호 이기 때문에 n+1 같은 과정은 필요 없다.

 

위의 코드를 통해 무리 없이 채점을 통과할 수 있었다.

댓글