-
반응형
https://www.acmicpc.net/problem/9242
-풀이-
먼저, 5x3 크기의 디지털 숫자를 0~9까지 3차원 배열로 만들어주었다.
그런 뒤, 코드를 입력을 받고, 검사하는 열을 i라고 한다면, (0,i) ~ (5,i+3)까지의 code배열을 10개의 숫자와 비교해가며, 일치하는 숫자가 있으면 sum=sum*10+n을 해주어 코드넘버를 추가시켜준다.
만약 10개의 숫자와 모두 일치하지 않는다면, 잘못된 코드이므로, bool 변수인 isWrong을 true로 바꿔준다.
그렇게 모든 코드를 검사한 뒤, 6으로 나누어떨어지지 않거나 isWrong 이 true이면 BOOM!!을, 아니면 BEER!!을 출력해준다.
-시간복잡도-
코드는 최대 8개이고, 한 코드당 10개의 숫자 각각 5X3크기의 배열을 비교해야 하므로, 8 * 10 * 5 * 3 = 1200 이므로, 총O(1)이 된다.
-코드-
#include <iostream> #include<vector> #include<string> using namespace std; char number[10][5][3] = { //0 { {'*','*','*'}, {'*',' ','*'}, {'*',' ','*'}, {'*',' ','*'}, {'*','*','*'} }, //1 { {' ',' ','*'}, {' ',' ','*'}, {' ',' ','*'}, {' ',' ','*'}, {' ',' ','*'} }, //2 { {'*','*','*'}, {' ',' ','*'}, {'*','*','*'}, {'*',' ',' '}, {'*','*','*'} }, //3 { {'*','*','*'}, {' ',' ','*'}, {'*','*','*'}, {' ',' ','*'}, {'*','*','*'} }, //4 { {'*',' ','*'}, {'*',' ','*'}, {'*','*','*'}, {' ',' ','*'}, {' ',' ','*'} }, //5 { {'*','*','*'}, {'*',' ',' '}, {'*','*','*'}, {' ',' ','*'}, {'*','*','*'} }, //6 { {'*','*','*'}, {'*',' ',' '}, {'*','*','*'}, {'*',' ','*'}, {'*','*','*'} }, //7 { {'*','*','*'}, {' ',' ','*'}, {' ',' ','*'}, {' ',' ','*'}, {' ',' ','*'} }, //8 { {'*','*','*'}, {'*',' ','*'}, {'*','*','*'}, {'*',' ','*'}, {'*','*','*'} }, //9 { {'*','*','*'}, {'*',' ','*'}, {'*','*','*'}, {' ',' ','*'}, {'*','*','*'} }, }; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string str; vector<string> code; for (int i = 0; i < 5; i++) { getline(cin,str); code.push_back(str); } bool isWrong = false; int sum = 0; for (int i = 0; i < code[0].size() ; i += 4) { int n; for (n = 0; n <= 9; n++) { bool flag = true; int cnt = 0; for (int x = 0; x < 5; x++) { for (int y = 0; y < 3; y++) { if (code[x][i + y] == '*') cnt++; if (code[x][i + y] != number[n][x][y]) { flag = false; } } } if (cnt == 0) { break; } if (flag) { sum = sum * 10 + n; break; } } if (n == 10) { isWrong = true; break; } } if (sum % 6 != 0 || isWrong) { cout << "BOOM!!\n"; } else { cout << "BEER!!\n"; } return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 20922번 겹치는 건 싫어 (0) 2021.07.18 [백준OJ] 10988번 팰린드롬인지 확인하기 (0) 2021.07.18 [백준OJ] 11657번 타임머신 (0) 2021.07.14 [백준OJ] 15591번 MooTube (Silver) (0) 2021.07.13 [백준OJ] 17027번 Shell Game (0) 2021.07.13 댓글