Close
Close full mode
logo만렙 개발자 키우기

청백전

Git RepositoryEdit on Github
Last update: a year ago by nowwaterReading time: 2 min

문제

코드

코드 보기
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String line = br.readLine();
Queue<Integer> bq = new LinkedList<>();
Queue<Integer> wq = new LinkedList<>();
for (int i = 0; i < line.length(); i++){
char temp = line.charAt(i);
if(temp == 'B') bq.add(i);
else wq.add(i);
}
while(!bq.isEmpty() && !wq.isEmpty()){
int b = bq.poll(), w = wq.poll();
if(b < w) bq.add(b + n);
else wq.add(w + n);
}
if(!bq.isEmpty()) System.out.println(1);
else System.out.println(0);
}
}

⭐️느낀점⭐️

스트링으로 해서 풀었었는데 조금만 생각해보면 큐를 이용할 수 있었을텐데 아쉽다.

풀이 📣


1️⃣ 순서를 입력받은 후 큐를 2개 만들어서 bq 에는 'B'일 때 인덱스를 저장하고 wq에는 'W' 일 때 인덱스를 저장한다.

2️⃣ 각 큐에는 인덱스 별로 저장되어 있으므로, 인덱스를 통해 어떤 값이 더 앞에 있는지 알 수 있다.

3️⃣ 두 큐가 1개 이상의 원소를 가지고 있는 동안 반복문을 돌며 조건을 확인한다.

while(!bq.isEmpty() && !wq.isEmpty())

4️⃣ 인덱스가 더 빠른 값이 더 앞에 놓여있음을 의미하기 때문에 가장 앞의 다른 색을 지워준다. 해당 값은 이전에 저장되어 있던 값과 우선순위를 맞춰주기 위해 원래 큐에 다시 삽입해주기 전에 n만큼 더한 인덱스 값으로 큐에 넣어준다.

5️⃣ 위의 과정을 반복하고 while문을 빠져나오면 아직 큐에 남아 있는 색에 따라 결과를 출력해준다.


실수 😅

  • 큐를 이용하지 않고 스트링을 이용했었는데 똑같이 적용했지만 원래 있던 인덱스값들과의 우선 순위 를 고려하지 않아서 틀렸다.
👩‍💻 Problem Solving — Previous
오르막
Next — 👩‍💻 Problem Solving
투자