문제(출처: https://www.acmicpc.net/problem/15235)
< Olympiad Pizza >
문제 풀이
입력으로 1 3 1 4가 들어온다면 Queue가 다음과 같다.
1 3 1 4 0초 정답 배열 [0,0,0,0]
3 1 4 1초 정답 배열 [1,0,0,0]
1 4 2 2초 정답 배열 [1,0,0,0]
4 2 3초 정답 배열 [1,0,3,0]
2 3 4초 정답 배열 [1,0,3,0]
3 1 5초 정답 배열 [1,0,3,0]
1 2 6초 정답 배열 [1,0,3,0]
2 7초 정답 배열 [1,7,3,0]
1 8초 정답 배열 [1,7,3,0]
9초 정답 배열 [1,7,3,9]
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _15235_ { // Olympiad Pizza
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(bf.readLine());
int arr[] = new int[N];
Queue<int[]> queue = new LinkedList<>();
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < N; i++) {
queue.add(new int[] { Integer.parseInt(st.nextToken()), i });
}
int time = 0;
while (!queue.isEmpty()) {
int result[] = queue.poll();
time += 1;
result[0] -= 1;
if (result[0] == 0) {
arr[result[1]] = time;
} else {
queue.add(result);
}
}
for (int i = 0; i < N; i++) {
bw.write(arr[i] + " ");
}
bw.flush();
}
}
변수)
N : 참가자 수
arr : 정답 배열
queue : Queue <int []>
time : 걸리는 시간
참가자 수 N을 입력받는다. N만큼 각 참가자가 필요한 조각 수를 입력받아 Queue에 저장한다. Queue가 빌 때까지 다음 과정을 반복한다.
1) queue poll
2) time+1 및 필요한 조각 수 -1
3) 필요한 조각을 다 얻었다면 arr배열에 초 저장
4) 필요한 조각을 다 얻지 못했다면 queue에 저장
최종 arr 배열을 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 3230_금메달, 은메달, 동메달은 누가? (1) | 2025.02.20 |
---|---|
[Baekjoon] 4446_ROT13 (0) | 2025.02.19 |
[Baekjoon] 13567_로봇 (0) | 2025.02.17 |
[Baekjoon] 15044_Fase (0) | 2025.02.14 |
[Baekjoon] 15081_Is Everybody Appy? (0) | 2025.02.13 |