각 자리에서 가능한 후보들을 추린다.
어떤 숫자가 나타나려면 다음과 같은 조건을 만족해야한다.
- 시계에 불이 들어와있다면, 수 $X$도 그 자리가 켜져있어야한다.
- 수 $X$에 불이 꺼져있는 자리는, 시계에도 불이 꺼져있어야한다.
- 시계에 불이 꺼져있어도, 수 $X$에 불이 들어온것과는 상관이 없다.
#include <bits/stdc++.h> using namespace std; char digit[10][17]={ "####.##.##.####", "..#..#..#..#..#", "###..#####..###", "###..####..####", "#.##.####..#..#", "####..###..####", "####..####.####", "###..#..#..#..#", "####.#####.####", "####.####..####" }; vector<int> cand[4]; char input[5][17]; bool match(int x, int k){ for(int i=0; i<5; ++i){ for(int j=0; j<3; ++j){ if(input[i][x+j] == '#' && digit[k][i*3+j] == '.') return false; } } return true; } int main(){ for(int i=0; i<5; ++i) gets(input[i]); int timer[4]={2, 9, 5, 9}; for(int x=0; x<4; ++x){ for(int k=0; k<=timer[x]; ++k){ if(match(4*x, k)){ printf("%d", k); break; } } if(x==1) putchar(':'); } return 0; }
댓글 없음:
댓글 쓰기