본문 바로가기

문제 노트/Atcoder

Pizza( Atcoder 238-B )

문제 : https://atcoder.jp/contests/abc238/tasks/abc238_b

 

B - Pizza

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

 

문제 파악하기

pizza를 주어진 각도만큼 회전시키고 잘랐을 때, 가장 큰 피자의 각도를 구하는 문제입니다. 피자의 각도는 0˚ ~ 359˚까지 있으며, 동일한 위치를 다시 자르지 않는다는 점을 고려하면 문제를 해결할 수 있습니다.

 

문제 해결하기

동일한 위치를 다시 자르지 않기에 우리는 0˚ ~ 359˚까지 배열을 사용해서 잘린 적이 있는지 확인하면 됩니다. 다만, 입력되는 각도는 360˚를 넘을 수 있기 때문에 나머지 연산자를 적절하게 사용하면 됩니다. 자르는 과정이 종료되었다면 잘린 각도 사이의 값 중 최댓값을 구하면 문제를 해결할 수 있습니다. 다만, 가장 처음 0˚를 자른다는 걸 유념하세요.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <vector>
#include <algorithm>
#define NMAX 360
using namespace std;
 
int N, a;
vector< int > pizza;
 
int cur, vmax;
 
int main() {
    scanf("%d"&N);
 
    pizza.push_back(0);
    for(int i=1;i<=N;i++) {
        scanf("%d"&a);
        cur = (cur + a)%360;
 
        pizza.push_back(cur);
    }
 
    sort(pizza.begin(), pizza.end());
 
    vmax = (360 +pizza[0]) - pizza.back();
    for(int i=1;i<pizza.size();i++) vmax = max( vmax, pizza[i]-pizza[i-1] );
 
    printf("%d", vmax);
}
cs

후기

추상화 과정이 필요한 문제입니다. 최근 풀었던 앳코더 B번 중 가장 재미있는 문제라고 생각합니다. 배열을 배운 사람들에게 추천하고 싶은 문제입니다. 케익 자르기(https://codeup.kr/problem.php?id=2628)의 상위 호환 문제라고 생각합니다.

'문제 노트 > Atcoder' 카테고리의 다른 글

Rook Path( Atcoder 232-E )  (0) 2021.12.24
Simple Operations on Sequence( Atcoder 232-F )  (0) 2021.12.20
Construct a Palindrome( Atcoder 196-F )  (0) 2021.11.29
Traveler( Atcoder 196-E )  (0) 2021.11.27
Opposite( Atcoder 196-D )  (0) 2021.11.25