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

[C++] 수박수박수박수박수박수? (연습문제)

by 민-Zero 2020. 3. 30.

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

 

설계 및 구현

구현을 위해 주어진 함수는 반환타입이 string이고 매개변수로 int형 변수 n을 가지는 함수이다. 구현 내용은 파이썬에서 고안하였으므로 바로 코드를 작성하면

 

C++ 에서는 파이썬처럼 문자열 슬라이싱을 제공하지 않기 때문에 횟수만큼 "수박" 문자열을 이어붙인뒤 전달받은 길이의 짝, 홀을 판단 홀수일 경우 "수"를 붙여반환하고 짝수라면 그대로 반환하도록 하여 문제의 목표를 만족시켰다.

 

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

 

※ 새롭게 배운것

다른 사람의 풀이를 통해 짝수 홀수를 비트연산자인 &를 통해 판별할 수 있음을 상기시킬수 있었다. 1과 AND비트 연산을 하면 홀수의 경우 항상 1을 반환하게 되고 짝수의 경우 0을 반환하여 참 거짓의 조건에 사용할 수 있다. 그에 맞추어 홀수 인덱스에는 "수"를 짝수 인덱스에는 "박"을 대입하여 해결하는 방법도 존재한다.

 

채점시간은 해당 방법이 좀더 오래걸리는데 이는 비트연산 과정이 나눗셈 과정보다 시간을 좀더 소요하기 때문이라고 추측된다.

댓글