
두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
r < q ≤ 20r < code의 길이 ≤ 1,000code는 영소문자로만 이루어져 있습니다.| q | r | code | result |
|---|---|---|---|
| 3 | 1 | "qjnwezgrpirldywt" | "jerry" |
| 1 | 0 | "programmers" | "programmers" |
입출력 예 #1
q와 r은 각각 3, 1이고 인덱스와 그 값을 q로 나눈 나머지가 잘 보이도록 표로 만들면 다음과 같습니다.| code | q | j | n | w | e | z | g | r | p | i | r | l | d | y | w | t |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| q로 나눈 나머지 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 |
q로 나눈 나머지가 1인 인덱스의 문자들을 앞에서부터 순서대로 이어 붙이면"jerry"가 되므로 이를 return 합니다.
#include <string>
#include <vector>
using namespace std;
string solution(int q, int r, string code) {
vector<char> answer;
for (int i = 0; i < code.length(); i++) {
if (i % q == r) { // 문자열을 q로 나눠서 r이 남는 문자
answer.push_back(code[i]);// answer 배열에 추가
}
}
// vector를 string으로 변환
return string(answer.begin(), answer.end());
}
q로 나눠서 r이 남는 번째의 문자만 모아서 새 문자열을 만드는 문제로 vector클래스를 사용해서 구현했다. 반복문을 사용해서 i를 0부터 문자열의 길이만큼 키워가면서 문자열을 인덱스 i를 q로 나누고 r만큼 남는지 확인 한 다음 새 문자열 answer에 push_back을 이용해 요소를 벡터 끝에 추가해준다.내가 제일 처음에 생각했던 코드는 다음과 같다.
#include <string>
using namespace std;
string solution(int q, int r, string code) {
for( i=0;i<code.size();i++){
string answer = "";
if( i % q == r)
answer += code[i];
}
return answer;
}
프로그래머스 문제에서는 vector을 쓰도록 초기 문장을 제시했는데 아무래도 vector보다 일반 어레이가 더 익숙하다 보니까 기존에 쓰던대로 문법을 진행했던 것 같다. 내가 쓴 코드도 문법 상으로는 오류가 없지만 vector를 사용하면 나중에 문자를 연결하는 연산에서 효율적이기 때문에vector 클래스를 사용하는 코드로 변경했다.내 초기 코드와 vector 클래스를 사용한 코드의 차이를 정리해보고 앞으로 코드를 작성할 때 더 유의해야겠다.
1. 벡터 사용 여부:
- 정답 코드는 vector<char> answer를 사용하여 문자를 저장해 나중에 문자열을 구성하기 위해 사용했다.
- 처음에 작성한 코드에서는 string answer를 사용해서 벡터 대신에 문자열 자체에 바로 문자를 추가했다.
2. 반환 타입:
- 정답 코드에서는 vector<char>로 문자를 저장한 후, string으로 변환하여 반환한다.
- 처음 코드에서는 문자열 자체를 반환했다.