반응형
출처: https://www.acmicpc.net/problem/5600
Input
2 2 2
4
2 4 5 0
2 3 6 0
1 4 5 0
2 3 5 1
Output
2
1
1
0
1
0
부품의 상태를 확신할 수 있는 경우는 언제일까?
① 검사 결과가 정상인 경우 → 3가지 부품이 모두 정상.
② 정상 + 정상 + x = 불합격 → x 부품 = 고장 상태
그 외의 경우에는 알 수가 없습니다.
ex) 정상 + 고장 + x = 불합격 → x의 상태는 알 수 없습니다.
ex) 고장 + 고장 + x = 불합격 → x의 상태는 알 수 없습니다.
ex) 정상 + 정상 + x = 불합격 → x의 상태는 알 수 없습니다.
부품들의 상태를 알 수 없는 상태(= 2)로 초기화 합니다.
그 후, 검사 결과 = 합격인 부품들을 모두 정상 상태(= 1)로 처리합니다.
마지막으로 {정상 + 정상 + x = 불합격}인 경우를 찾아 x 부품을 고장 상태(= 0)로 처리합니다.
그 외의 처리되지 않은 부품은 알 수 없는 상태를 유지합니다.
#include <iostream>
using namespace std;
#define BROKEN 0
#define NORMAL 1
#define UNKNOWN 2
typedef struct {
int first, second, third;
bool result;
} checker;
int a, b, c, N, temp;
int parts[301];
checker checkers[1001];
void findBrokenPart(int idx) {
int normalCnt = 0;
if (parts[checkers[idx].first] == NORMAL) normalCnt++;
if (parts[checkers[idx].second] == NORMAL) normalCnt++;
if (parts[checkers[idx].third] == NORMAL) normalCnt++;
if (normalCnt == 2) {
if (parts[checkers[idx].first] == UNKNOWN) parts[checkers[idx].first] = BROKEN;
if (parts[checkers[idx].second] == UNKNOWN) parts[checkers[idx].second] = BROKEN;
if (parts[checkers[idx].third] == UNKNOWN) parts[checkers[idx].third] = BROKEN;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> a >> b >> c >> N;
// 모드 부품을 알 수 없는 상태로 설정
for (int i = 1; i <= a + b + c; ++i)
parts[i] = UNKNOWN;
// 검사 결과
for (int i = 1; i <= N; i++) {
cin >> checkers[i].first >> checkers[i].second >> checkers[i].third >> temp;
checkers[i].result = temp == 1 ? true : false;
}
// 정상으로 판단된 검사를 토대로 해당 부품들을 정상으로 처리
for (int i = 1; i <= N; i++) {
if (checkers[i].result) {
parts[checkers[i].first] = NORMAL;
parts[checkers[i].second] = NORMAL;
parts[checkers[i].third] = NORMAL;
}
}
// 2개의 정상 부품 사이에서 고장난 부품 한 개 찾기
for (int i = 1; i <= N; i++) {
if (!checkers[i].result) {
findBrokenPart(i);
}
}
// 정답 출력
for (int i = 1; i <= a + b + c; ++i)
cout << parts[i] << endl;
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 1461 도서관 (4) | 2021.02.20 |
---|---|
[BOJ] 백준 1043 거짓말 (0) | 2021.02.20 |
[BOJ] 백준 1987 알파벳 (0) | 2021.02.20 |
[BOJ] 백준 3987 보이저 1호 (0) | 2021.02.20 |
[BOJ] 백준 1339 단어 수학 (0) | 2021.02.20 |
댓글