Problem
네 방향에서 바라볼 때의 보이는 건물의 개수가 주어질 때 가능한 건물들의 형태를 구하는 문제
4 | 3 | 2 | 1 | ||
---|---|---|---|---|---|
4 | 1 | 2 | 3 | 4 | 1 |
3 | 2 | 3 | 4 | 1 | 2 |
2 | 3 | 4 | 1 | 2 | 2 |
1 | 4 | 1 | 2 | 3 | 2 |
1 | 2 | 2 | 2 |
Solution
- 실행파일 옵션으로 입력된 값(argv)을 하나의 배열에 저장한다.
- 4x4의 케이스(건물의 형태)를 저장할 틀을 5x5로 저장한다. row 0과 column 0은 값이 들어오지 않는다고 가정함. (xy좌표축 처럼 직관적으로 사용하기 위해.)
- 1row부터 각 column에 해당하는 칸에 들어갈 숫자를 1부터 4까지 넣어가며
- 중복 검사(작은 row, 작은 column과 비교)
- 유효성 검사(각 방향에서의 숫자와 보이는 숫자가 일치하는지 비교) 후에
- 모든 검사를 통과하면 출력한다.
탐색 방법: 깊이 우선 탐색
Defense
1시에 평가를 시작하자 마자 평가자분이 해당 파일을 실행시켰는데 error가 출력됐다. 예외 체크도 하기 전에 error가 떠서 다들 당황했었는데 알고보니 bad option에 해당하는 값을 입력해서 생긴 문제였다.
바로 제대로 코드를 살펴보며 질문을 했는데 argv를 받을 때 형태(“숫자+스페이스+숫자+···+숫자”)의 형태가 맞는지 체크하는 부분이 빠졌다고 지적을 받았다. 또 전역변수를 사용한 부분에 대해 지적받았다. 하지만 다행히 이 부분들은 토론 끝에 다음에 더욱 주의를 기울이는걸로 하고 제대로 점수를 받을 수 있었다.
전역변수를 사용하지 않고 문제를 해결하려면 구조체를 사용하거나 포인터를 사용해 넘겨주면 된다고 한다.
etc
토요일에 만나서 반나절을 고심한 끝에 세운 해결책은 다음과 같았다.
1~4의 정수로 이루어질 수 있는 모든 4x4의 케이스를 구하는 함수를 짠 후에 차례대로 중복검사와 유효성검사를 실행하여 맞는 케이스를 찾아내는 것이었다.
하지만 이렇게 세운 전략대로 코드를 짤 수가 없었다. 이후에 한 팀원이 다른 전략을 찾아서 코드를 완성할 수 있었다.