PS

BOJ 3363 : 동전

lickelon 2024. 4. 22. 22:46
  • 문제 링크 : boj.kr/3363
  • 난이도 : G5
  • 태그 : 브루트포스, 구현
 

3363번: 동전

여러분은 양팔 저울 하나와 동전 12개(1, 2, ..., 12 의 번호)를 가지고 있는데, 그 중 하나는 모조품입니다. 모조품은 다른 동전보다 가볍거나 무겁습니다.  양팔 저울로 세 번 측정하여 모조품

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

struct measurement {
    int a[4];
    int c;
    int b[4];
};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    vector<int> arr(12, 10);

    measurement input[3];
    for(int i = 0; i < 3; i++) {
        cin >> input[i].a[0] >> input[i].a[1] >> input[i].a[2] >> input[i].a[3];
        string s;
        cin >> s;
        if(s == "<") input[i].c = -1;
        if(s == "=") input[i].c = 0;
        if(s == ">") input[i].c = 1;
        cin >> input[i].b[0] >> input[i].b[1] >> input[i].b[2] >> input[i].b[3];
    }
    
    vector<int> cand;
    for(int i = 0; i < 24; i++) {
        arr[i/2] += (i%2 ? 1 : -1);
        bool res = true;
        for(int j = 0; j < 3; j++) {
            int sa = 0, sb = 0;
            for(auto u : input[j].a) sa += arr[u-1];
            for(auto u : input[j].b) sb += arr[u-1];
            if(input[j].c == -1) {
                if(sa < sb) res &= true;
                else res &= false;
            }
            if(input[j].c == 0) {
                if(sa == sb) res &= true;
                else res &= false;
            }
            if(input[j].c == 1) {
                if(sa > sb) res &= true;
                else res &= false;
            }
        }
        if(res) cand.push_back(i);
        arr[i/2] = 10;
    }

    if(cand.size() == 1) {
        cout << cand[0] / 2 + 1;
        cout << (cand[0]%2 ? "+" : "-");
    }
    if(cand.size() == 0) cout << "impossible";
    if(cand.size() > 1) cout << "indefinite";

    return 0;
}

풀이

언뜻 보기엔 문제가 복잡해보인다. 하지만 나올 수 있는 경우를 생각해보면 각각의 동전이 무겁거나 가벼운 경우로 총 24가지밖에 없다. 따라서 브루트포스로 해결할 수 있다.

구현은 입력, 후보 판별, 정답 세 부분으로 나누어 구현한다.

728x90

'PS' 카테고리의 다른 글

BOJ 2045 : 마방진  (0) 2024.04.24
BOJ 3064 : Minesweeper  (0) 2024.04.23
BOJ 16207 : 직사각형  (1) 2024.04.21
BOJ 1013 : Contact  (0) 2024.04.20
BOJ 2671 : 잠수함식별  (0) 2024.04.19