※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2082번 문제인 시계이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2082
2082번: 시계
코레스코 콘도의 각 방에는 디지털 시계가 설치되어 있다. 디지털 시계에는 4개의 숫자가 표현될 수 있으며, 이것은 'hh:mm'의 형식으로 시간을 표현한다. 즉, 앞의 두 자리는 시간을, 뒤의 두 자리
www.acmicpc.net
시계가 표기하는 문자 X가 의미할 수 있는 가장 작은 숫자 i는 "i를 정상적으로 나타낼 때 켜져있을 수 없는(i를 정상적으로 나타낼 때 꺼져있어야 하는) 다이오드가 X에 켜져있지 않은, 가장 작은 i"와 같다. 이와 같은 관찰을 이용해 각 문자가 나타낼 수 있는 가장 작은 숫자를 찾아 문제를 해결하자.
위와 같이 찾은 숫자들이 올바른 시각을 구성하지 못한다면 주어진 입력은 올바른 시각을 표기할 수 없다는 것을 의미함을 관찰하자. (위에서 구한 수가 가능한 가장 작은 수이기 때문이다.) 따라서 위와 같은 풀이로 문제의 답을 항상 구해낼 수 있음을 보장할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
string num[10][5] =
{
{
"###",
"#.#",
"#.#",
"#.#",
"###"
},
{
"..#",
"..#",
"..#",
"..#",
"..#"
},
{
"###",
"..#",
"###",
"#..",
"###"
},
{
"###",
"..#",
"###",
"..#",
"###"
},
{
"#.#",
"#.#",
"###",
"..#",
"..#"
},
{
"###",
"#..",
"###",
"..#",
"###"
},
{
"###",
"#..",
"###",
"#.#",
"###"
},
{
"###",
"..#",
"..#",
"..#",
"..#"
},
{
"###",
"#.#",
"###",
"#.#",
"###"
},
{
"###",
"#.#",
"###",
"..#",
"###"
}
};
string digit[4][5];
int ans[4];
bool func(int i, int dgt) {
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 3; c++) {
if (num[dgt][r][c] == '.' && digit[i][r][c] == '#') return 0;
}
}
return 1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int r = 0; r < 5; r++) {
for (int i = 0; i < 4; i++) cin >> digit[i][r];
}
for (int i = 0; i < 4; i++) {
int dgt = 0;
while (!func(i, dgt)) dgt++;
ans[i] = dgt;
}
cout << ans[0] << ans[1] << ':' << ans[2] << ans[3];
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 3278 // C++] EXCHANGE (0) | 2023.08.30 |
---|---|
[BOJ 3277 // C++] DOMAINS (0) | 2023.08.29 |
[BOJ 2079 // C++] 팰린드롬 (1) | 2023.08.27 |
[BOJ 3279 // C++] DOLLARS (0) | 2023.08.26 |
[BOJ 3284 // C++] MASS (0) | 2023.08.25 |