선택은 나의 것

[BOJ 백준] 2916번 자와 각도기 본문

☽ Algorithm/BOJ

[BOJ 백준] 2916번 자와 각도기

Algoribi 2020. 5. 26. 17:07

문제

BOJ 2916 : https://www.acmicpc.net/problem/2916

 

2916번: 자와 각도기

문제 창영이는 방 청소를 하다가 자와 각도기를 발견했다. 다음날 창영이는 학교에 자와 각도기를 들고 갔고, 현우와 "작도 대결"을 하려고 한다. 창영이는 각도기와 자를 이용해서 만들 수 있는

www.acmicpc.net

접근

이 문제에서 우리는 창영이가 알고 있는 임의의 각도들을 이용하여 또 다른 각도를 만들 수 있다.

ex) 60°와 20°를 이용하여 80°(60°+20°)와 40°(60°-20°)를 만들 수 있다.

이때 임의의 각의 배수인 각도 만들 수 있다.

ex) 30°와 30°를 이용하여 60°를 만들 수 있다.

따라서 창영이가 만들 수 있는 각을 전부 조사하여 배열에 저장한 뒤에 테스트 케이스에 맞는 답을 출력해주면 된다.

 

코드

// algorithm study
// BOJ_2916_자와 각도기

#include <iostream>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    int chk[360] = {0};
    chk[0] = 1;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        for (int j = 0; j < 360; j++) {
            if (chk[j] == 0)
                continue;
            for (int k = 1; k < 360; k++) {
                chk[(j + (k * num)) % 360] = 1;
                chk[abs((j - (k * num)) % 360)] = 1;
            }
        }
    }

    for (int i = 0; i < k; i++) {
        int temp;
        cin >> temp;
        if (chk[temp] == 1)
            cout << "YES"
                 << "\n";
        else
            cout << "NO"
                 << "\n";
    }
    return 0;
}

 

깃 허브 주소 : https://github.com/algoribi/algorithm-study

Comments