컴퓨터/백준 알고리즘
백준 알고리즘 - 12789번: 도키도키 간식드리미 [Java]
이상한 나그네
2023. 9. 27. 00:36
문제: https://www.acmicpc.net/problem/12789
1. 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Stack <Integer> take = new Stack<>();
Stack <Integer> wait = new Stack<>();
while(N-- > 0) {
int num = sc.nextInt();
if(num == take.size() + 1)
take.push(num);
else
wait.push(num);
while(!wait.isEmpty() && take.size() + 1 == wait.peek())
take.push(wait.pop());
}
if(wait.isEmpty())
System.out.println("Nice");
else
System.out.println("Sad");
}
}
2. 설명
take는 간식을 받는 사람들의 명단이며 wait은 간식을 받기 위해 잠시 기다리는 사람들의 줄입니다. take에서는 1부터 N까지 순차적으로 저장이 되며 만약 순서가 엉킨다면 wait에서 기다리게 합니다. 만약 take 다음 순서가 wait의 peek 값이라면 pop 하여 take에 push 해줍니다.
이 모든 일련의 과정을 거치고 만약 wait이 비어 있다면 모든 사람들이 순서대로 간식을 받았기에 Nice를 출력하고 비어있지 않다면 순서대로 받지 못한 사람이 존재하기에 Sad를 출력합니다.
3. 정리
- 스택을 적절히 사용하자.