🌞Algorithm/🔥Baekjoon

[Baekjoon] 15235_Olympiad Pizza

뿌야._. 2025. 2. 18. 15:03
문제(출처: 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