요즘 내가 현생을 살지 못하는 이유는 노노그램
0. 아 이놈의 노노그램에 빠져서 현생을 살지 못하고 있다. 그 네모를 채우는게 왜이렇게 재밌을까? 잠도 못자고 토플 공부도 뒤쳐두고 코딩도 안하고 블로그도 멈추고 노노그램 때문에 미치겠다. 그래서 내가 노노그램을 재미없다고 생각하게 만들어야겠다. 노노그램을 해체하고 분석해서 네모를 내가 채우지 않고도 자동으로 채워지게 해야겠다.

1. 노노그램 첫 번째 문제의 정답이다. 0은 채워지지 않은 네모이고 1은 채워진 네모이다.
3 (111) | 4 (1111) | 4 (1111) | 4 (1111) | 3 (111) | |
1 1 (1)(1) | 0 (0,0) | 1 (0,1) | 0 (0,2) | 1 (0,3) | 0 (0,4) |
5 (11111) | 1 (1,0) | 1 (1,1) | 1 (1,2) | 1 (1,3) | 1 (1,4) |
5 (11111) | 1 (1,0) | 1 (2,1) | 1 (2,2) | 1 (2,3) | 1 (2,4) |
5 (11111) | 1 (3,0) | 1 (3,1) | 1 (3,2) | 1 (3,3) | 1 (3,4) |
1 (1) | 0 (4,0) | 0 (4,1) | 1 (4,2) | 0 (4,3) | 0 (4,4) |
2. 생각해보자
(데이터모으기) 무슨 데이터가 필요할까.. 음 내가 노노그램을 푸는 순서가 어떻게 되더라??
n: int, order[]: int, row[][]: int, rowBool[][][]: int, rowNum[]: int, col[][]: int, colBool[][][]: int, colNum[]: int
- 노노그램의 한 행(열)의 네모개수를 입력 받는다. // n = 5
- 각 행(열)의 연속되는 네모개수의 숫자를 입력 받는다. // row = {{1,1},{5},{5},{5},{1}}, col = {{3},{4},{4},{4},{3}}
- 네모의 숫자와 (숫자의 개수-1)를 더한 값이 가장 큰 행을 구한다. // rowNum = {3,5,5,5,1}, colNum = {3,4,4,4,3}
- 각 행과 열의 네모 숫자를 입력 받아 1과 0의 집합 데이터로 바꾼다. // rowBool = {{{1},{1}},{{1,1,1,1,1}},{{1,1,1,1,1}},{{1,1,1,1,1}},{{1}}}, colBool = {{{1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1}}}
- 네모의 숫자와 숫자의 개수를 더한 값의 내림차순 구한다. row는 100번 대, col은 200번 대 // order = {101,102,103,201,202,203,100,200,204,204}
(계산하기) 구글링 해본 결과 다들 반복문을 계속 돌려서 하셨다. 약간 좌표랑 순서를 생각하면 반복문을 그렇게 까지 돌리지 않을 수 있지 않을까 모르겠다.
rowAnswer[][]: int, colAnswer[][]: int
- rowNum 과 colNum 의 원소 중에 n과 같은 것이 있으면 칠한다. // rowAnswer = {{},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{}}
3. 하 머리가 안돌아가네 내일 이어서 생각해 봐야 겠다.