728x90
프리코딩테스트 1-2
1) Billboard
오답 노트 코드
import java.util.Queue;
import java.util.LinkedList;
class Solution {
public String solution(int n, String s, int t) {
String answer = "";
int idx = 0;
Queue que = new LinkedList();
String[] strArr = s.split("");
String[] newStrArr = new String[s.length() + n];
for(int i = 0; i < n; i++){
que.add(".");
}
for(int i = 0; i<(s.length() + n); i++){
if (i<s.length()){
newStrArr[i] = strArr[i];
} else {
newStrArr[i] = ".";
}
}
for(int i = 1; i <= t; i++){
que.remove();
que.add(newStrArr[idx++]);
if(idx == (s.length() + n)){
idx = 0;
}
}
while(!que.isEmpty()){
answer += que.remove();
}
return answer;
}
}
문제 풀이 코멘트
처음 문제를 접했을 때엔 큐를 사용해야겠다는 생각없이 for문만으로 해결하려고 하다보니 코드가 너무 복잡해지고 어떻게 구현할지 막막하여 풀지 못했다. 아직도 문제만 보고는 한번에 풀이를 구현하진 못하지만 이론적으로 이해는 되었다.
먼저 크기가 n인 전광판을 표현하기 위해 Queue를 사용한다. Queue는 먼저 들어간 데이터가 먼저 나오는 자료구조로, 이 경우 가장 오래전에 들어간 문자가 먼저 출력된다. 전광판을 표현하기 위해 크기가 (n+s.length())인 newStrArr 배열을 생성한다. 처음 n개는 "."으로 초기화하고, 나머지는 문자열 s의 글자들로 채운다. 시간 t만큼 반복하면서 전광판을 업데이트한다. 매 초마다 que에서 가장 오래전에 들어간 글자를 제거하고, 새로운 글자(newStrArr의 idx 위치)를 que에 추가한다. 이때 idx를 증가시키며, 전광판을 반복적으로 흘러가게 합니다. 만약 idx가 newStrArr의 크기와 같아지면, 다시 처음부터 반복되도록 idx를 0으로 초기화합니다. 모든 시간이 지난 후, que에 남아있는 문자들을 하나씩 제거하면서 answer 변수에 누적하여 문자열을 만듭니다. 이렇게 크기 n인 전광판에 문자열 s를 t초 후에 노출시킨 결과를 얻을 수 있다.
728x90
'공log > [P&B]' 카테고리의 다른 글
[P&B] #13 PreCodingTest (0) | 2023.07.31 |
---|---|
[P&B] #12 PreCodingTest (0) | 2023.07.30 |
[P&B] #10 PreCodingTest (0) | 2023.07.28 |
[P&B] #9 Programmers (0) | 2023.07.27 |
[P&B] #8 Programmers (0) | 2023.07.26 |