문제
12789번: 도키도키 간식드리미
인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두
www.acmicpc.net
접근 방식
스택을 활용해서 풀 수 있는 문제다.
주어진 입력을 순회하면서 크게 두 가지 경우로 나누어 처리해 주면 되는데
바로 현재 입력값이 now와 같은지 다른지이다.
now는 1부터 시작하는 변수를 선언하여 해당 순서가
간식을 받을 때마다 1씩 증가시켜 주면서
다음 순서를 확인할 수 있게 해주는 변수다.
만약 현재 사람이 간식을 받을 순서가 맞다면 스택에 넣지 않고
그대로 now를 1 증가시켜 준 뒤에 남아있는 스택을 확인하면서
now와 일치하는 값이 있다면 뽑아주고 그렇지 않다면 넘어간다.
반대로 현재 사람이 받을 순서가 아니라면 스택에 넣어주기만 하면 된다.
예를 들어 3 2 1 순서로 줄을 서 있다면 3과 2는 스택에 들어가고
1이 간식을 받은 후에 2와 3의 순서대로 꺼내면 정렬된 순서를 만들 수 있다.
풀이
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Stack<Integer> s = new Stack<>();
int now = 1;
for (int i = 0; i < n; i++) {
if (arr[i] == now) {
now++;
while (!s.isEmpty()) {
if (s.peek() == now) {
s.pop();
now++;
} else {
break;
}
}
} else {
s.push(arr[i]);
}
}
System.out.println(s.isEmpty() ? "Nice" : "Sad");
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 10819번 : 차이를 최대로 (0) | 2024.04.08 |
---|---|
[백준] 27964번 : 콰트로치즈피자 (0) | 2024.04.07 |
[백준] 22233번 : 가희와 키워드 (0) | 2024.04.04 |
[백준] 20291번 : 파일 정리 (0) | 2024.04.03 |
[백준] 4358번 : 생태학 (0) | 2024.04.02 |