728x90
반응형
SMALL
백준 문제 풀이: 15235 (Olympiad Pizza)
문제 링크: https://www.acmicpc.net/problem/15235
문제 설명:
n명의 학생들이 원형으로 앉아 있고, 각자가 먹어야 할 피자 조각 수가 주어진다. 피자는 한 번에 한 조각씩 나눠지며, 첫 번째 학생부터 시작해 한 바퀴씩 순차적으로 1조각씩 나누어준다. 피자를 받은 학생은 남은 조각 수를 1 줄이며, 만약 0이 되면 더 이상 받지 않는다.
모든 학생이 자신의 피자를 다 먹을 때까지 이 과정을 반복하며, 각 학생이 마지막으로 피자를 받은 시점을 구해야 한다.
문제 해결 코드
// 15235번: Olympiad Pizza
// 원형 순회하며 각 학생이 피자 다 먹는 마지막 시점 기록
#include <iostream>
using namespace std;
int arr[1001]; // 각 학생이 필요한 피자 조각 수
int cnt[1001]; // 각 학생이 마지막으로 피자 받은 시점
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int time = 0; // 현재 시간 (피자 조각 수 기준)
while (true) {
bool done = true;
for (int i = 0; i < n; i++) {
if (arr[i] > 0) {
done = false;
time++;
arr[i]--; // 피자 한 조각 먹기
if (arr[i] == 0)
cnt[i] = time; // 마지막 조각 시간 기록
}
}
if (done) break; // 모두 다 먹었으면 종료
}
for (int i = 0; i < n; i++) {
cout << cnt[i] << ' ';
}
}
코드 설명
- 핵심 알고리즘: 시뮬레이션 — 순차적으로 한 명씩 피자 한 조각씩 배분
- 구현 세부사항:
arr[i]
: i번째 학생이 남은 피자 조각 수cnt[i]
: i번째 학생이 마지막 피자를 받은 시간- 매 시간마다 순회하며 조각이 남은 학생에게만 1조각 배분
- 시간 복잡도 분석:
O(n ⋅ max(arr[i])) — 모든 조각이 나눠질 때까지 순차 순회
결과
각 학생이 마지막으로 피자를 받은 시간을 출력합니다.
예시 입력:
3
2 1 3
예시 출력:
4 2 6
설명: - 1라운드: 1번(1), 2번(1), 3번(1) → 1 0 2 - 2라운드: 1번(0), 3번(1) → 0 0 1 - 3라운드: 3번(0)
다른 접근 방식이나 개선 아이디어가 있다면 댓글로 자유롭게 남겨주세요!
728x90
반응형
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 5766번 [할아버지는 유명해!](C++) -yes6686- 티스토리 (0) | 2025.06.18 |
---|---|
백준 31458번 [!!초콜릿 중독 주의!!](C++) -yes6686- 티스토리 (1) | 2025.06.09 |
백준 10864번 [친구](C++) -yes6686- 티스토리 (1) | 2025.06.08 |
백준 11094번 [꿍 가라사대](C++) -yes6686- 티스토리 (2) | 2025.06.05 |
백준 12760번 [최후의 승자는 누구?](C++) -yes6686- 티스토리 (0) | 2025.06.04 |