문제
https://www.acmicpc.net/problem/5002
5002번: 도어맨
첫째 줄에 정인이가 기억할 수 있는 가장 큰 차이 X<100이 주어진다. 둘째 줄에는 줄을 서 있는 순서가 주어진다. W는 여성, M은 남성을 나타내며, 길이는 최대 100이다. 가장 왼쪽에 있는 글자가 줄
www.acmicpc.net
해설
- 입력받은 문자열의 각 문자를 Deque에 넣는다.
- 하나씩 꺼내며, 해당 문자가 M이면 man의 카운트를 1올리고, W이면 woman의 카운트를 1올린다.
- 이때, 최대 기억할 수 있는 수를 넘어간다면 꺼낸 성별의 카운트를 다시 빼서 원상복구해준다.
- 이후, Deque에서 다음 문자를 확인하고 현재 꺼낸 문자와 다르다면 해당 문자를 꺼내고
이에 해당하는 성별의 카운트를 1올려준다.
=> 문제의 조건 : 두번째 사람을 먼저 입장시킬 수 있다. - 만약, Deque가 비어있거나 그 다음 사람도 성별이 같다면 현재 꺼낸 사람도 입장시킬 수 없으므로 카운트를 -1 하고 종료한다.
- 최종적으로 입장한 man + woman의 카운트를 더해주면 입장한 사람의 수를 구할 수 있다.
코드
import java.io.*;
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int X = Integer.parseInt(br.readLine());
String input = br.readLine();
ArrayDeque<Character> deque = new ArrayDeque<>();
for (int i = 0; i < input.length(); i++) {
deque.offerLast(input.charAt(i));
}
int man = 0;
int woman = 0;
while (!deque.isEmpty()) {
char gender = deque.poll();
if (gender == 'M') {
man++;
if (Math.abs(man - woman) > X && !deque.isEmpty()) {
char next = deque.peek();
man--;
if(next == 'W'){
deque.poll();
deque.offerFirst(gender);
woman++;
} else {
break;
}
} else if (Math.abs(man - woman) > X && deque.isEmpty()) {
man--;
break;
}
} else {
woman++;
if (Math.abs(man - woman) > X && !deque.isEmpty()) {
char next = deque.peek();
woman--;
if(next == 'M'){
deque.poll();
deque.offerFirst(gender);
man++;
} else {
break;
}
} else if (Math.abs(man - woman) > X && deque.isEmpty()) {
woman--;
break;
}
}
}
StringBuilder sb = new StringBuilder();
sb.append(man + woman);
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
결론
문제에서 요구하는 조건이 많지 않아 그냥 시키는대로 하면 풀리는 문제!
'CodingTest > 백준' 카테고리의 다른 글
[백준] BOJ 2866 문자열 잘라내기 (골드 5) (0) | 2024.04.20 |
---|---|
[백준] BOJ 16234 인구 이동 (골드 4) (1) | 2024.04.20 |
[백준] BOJ 11055 가장 큰 증가하는 부분 수열 (실버 2) (0) | 2024.04.20 |
[백준] BOJ 14500 테트로미노 (골드 4) (0) | 2024.04.20 |
[백준] BOJ 1522 문자열 교환 (실버 1) (0) | 2024.04.20 |