https://www.acmicpc.net/problem/3985
3985번: 롤 케이크
문제 인기 티비 프로그램 "나는 요리사 인가?"의 새 시즌이 시작한다. 이번 시즌은 기네스북에 등재될 만한 음식을 만드는 것을 목표로 진행한다. 첫 번째 에피소드에 출연하는 요리사는 전설의 요리사 김상근이고, 길이 L미터의 롤 케이크를 만들 것이다. 상근은 몇 시간동안 집중해서 케이크를 만들었고, 이제 스튜디오의 방청객 N명에게 케이크를 나누어 주려고 한다. 상근이는 롤 케이크를 펼쳐서 1미터 단위로 잘라 놓았다. 가장 왼쪽 조각이 1번, 오른쪽 조각이
www.acmicpc.net
간단한 구현 문제다. 배열을 인덱스가 조각의 번호이고 배열의 값이 조각을 가져간 사람의 번호이다. 조각을 가져가지 않은 경우만 다른 사람이 조각을 가져갈 수 있다.
#include <iostream>
#include <vector>
using namespace std;
int L, N; //길이 L, 사람 수 N
int a, b; //조각의 시작과 끝(a ~ b)
int mat[1001]; //롤 케이크 조각들, 조각의 주인을 나타냄
int lie = -1; //가장 많은 조각을 받는다고 가정할 때 가장 많은 조각의 수
int lie_people; //가장 많은 조각을 받는다고 기대한 사람의 번호
int real = -1; //실제로 가장 많은 조각을 받는을 때 가장 많은 조각의 수
int real_people; //실제로 가장 많은 조각을 받는 사람의 번호
int main() {
cin >> L;
cin >> N;
//사람의 순서에 따라 조각을 가져간다.
for (int i = 1; i <= N; i++) {
cin >> a >> b;
for (int j = a; j <= b; j++) { //a조각부터 b조각까지 가져간다.
if (mat[j] != 0) { // 이미 가져간 조각은
continue; //못 가져간다.
}
mat[j] = i; //조각을 가져간다.
}
if (lie < (b - a)) { //b - a를 하여 가져갈 수 있는 조각의 수를 가정, 가장 많은 조각을 가져갈 것으로 예상되는 사람을 고른다.
lie = b - a;
lie_people = i;
}
}
//실제로 가장 많은 조각을 가져간 사람을 찾음, N명에 대하여 길이 L을 조사했을 때 조각의 주인을 찾는 과정
for (int i = 1; i <= N; i++) {
int cnt = 0;
for (int j = 1; j <= L; j++) {
if (mat[j] == i) {
cnt++;
}
}
if (real < cnt) {
real = cnt;
real_people = i;
}
}
cout << lie_people << '\n';
cout << real_people << '\n';
}
'백준' 카테고리의 다른 글
백준9322 - 철벽 보안 알고리즘 (0) | 2019.09.09 |
---|---|
백준4949 - 균형잡힌 세상 (0) | 2019.09.08 |
백준1213 - 팰린드롬 만들기 (0) | 2019.09.07 |
백준1058 - 친구 (0) | 2019.09.06 |
백준17206 - 준석이의 수학 숙제 (0) | 2019.09.05 |