코딩테스트/프로그래머스
qr code, 카운트 다운
구너드
2023. 6. 10. 21:17
반복문을 통해 code의 길이만 i를 반복해주고 해당 i를 q로 나누었을 때 나머지가 r인 경우의 인덱스만 추출해서 StringBuiler로 작성된 answer에 넣어주면 될 것 같다.
StringBuilder answer = new StringBuilder();
for(int i = 0; i < code.length(); i++) {
if(i % q == r) {
answer.append(code.charAt(i));
}
}
return answer;
하지만 제출할 때 오류가 발생하였다.
/Solution.java:10: error: incompatible types: StringBuilder cannot be converted to String
찾아보니 String으로 반환되어야 할 answer가 StringBuilder로 반환되었기에 이러한 오류가 발생했다는 것을 알 수 있었다.
이를 위해 answer를 다시 String으로 바꾸려면,
class Solution {
public String solution(int q, int r, String code) {
StringBuilder answer = new StringBuilder();
for(int i = 0; i < code.length(); i++) {
if(i % q == r) {
answer.append(code.charAt(i));
}
}
return answer.toString();
}
}
와 같이 작성할 수 있겠다
start와 end를 가지고 반복문을 사용하면 쉽게 풀 수 있는 문제라고 생각했다.
int[] answer = new int [start - end + 1];
for(int i = start; i >= end; i--) {
}
하지만 이 부분에서 막혔는데, answer의 길이가 start - end + 1이라는 점과 반복문을 통해 연산된 것이 어떻게 answer배열안에 들어가게 할 것인가라는 점이었다.
어쨌든 answer 배열마다 start가 1씩 줄어든 값을 넣어야하므로 반복문을 수정하였다.
int[] answer = new int [start - end + 1];
for(int i = 0; i < start - end + 1; i++) {
answer [i] = start--;
}
return answer;
이 후 테스트를 돌렸으나 값이 이상하게 나왔다. [10,9,8,7,0,0,0,0] 와 같은 형태로 나왔는데 로직상 문제가 없는데 어디서 문제가 발생한 것인지에 대해 찾아봐야했다. 잠시 고민 뒤, 반복문을 통해 start값이 바뀌었기에 for문 안의 조건식에도 영향을 주게 된다는 것을 알게 되었다. 따라서 이를 바꾸면
class Solution {
public int[] solution(int start, int end) {
int[] answer = new int [start - end + 1];
for(int i = 0; i < answer.length; i++) {
answer[i] = start--;
}
return answer;
}
}
와 같이 표현될 수 있다.