※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts