문제
- BOJ 1913: 달팽이 https://www.acmicpc.net/problem/1913
풀이
- (0, 0)에 n*n 값을 넣고, 1씩 줄여나가며 1이 되면 멈추는 코드를 구현하고자 했다.
n값과 좌표를 알고자 하는location값을 입력 받는다.snail을 2차원 배열로 만들고 length를 n으로 설정해준다.snail의 x좌표와 y좌표를 기본 0으로 세팅한다.- 1씩 줄여나가면서
snail의 좌표가 좌표 범위를 벗어나거나 값이 이미 채워져있으면 방향을 틀어야하기 때문에 방향을 전환할 수 있는 나침반과 같은 배열(dx, dy)을 만든다. - 달팽이가 움직이는 방향은
아래, 오른쪽, 위, 왼쪽을 반복하기 때문에dx와dy값을 미리 설정해놓는다. dx와dy의 방향을 정해주는idx값을 0으로 설정하고 4보다 작을 때까지 무한 루프로snail에 값을 넣어준다.- 다음 좌표가 범위 안에 있고,
nx와ny가 0보다 크거나 같고, 아직 값을 넣지 않은 위치라면 이전 좌표의 수보다 1 작은 값을 넣어준다. - 만약 해당 값이 1이라면 멈춘다.
- 다음 좌표를 찾기 위해서 값을 갱신해준다.
- 한 변이 다 채워지면 방향을 틀어야하기 때문에
idx값을 늘려준다. - 아직 1이 채워지지 않았지만
idx가 4면 for 루프가 끝나기 때문에, 다시 0으로 돌아가아래, 오른쪽, 위, 왼쪽을 반복해준다. snail에location와 같은 값이 채워진다면 해당 좌표를locationX와locationY에 저장해놓는다.
첫 번째 시도 코드
| |
오류 해결
2번의 실패가 있었다.
- n이 1인 경우 n이 1인 경우, 기존 코드로 진행했을 때 break 하는 부분이 없었기 때문에 실패했다. 그래서 다음 코드를 추가했다.
| |
특이 케이스로 n이 1인 경우에는 (0, 0)까지만 저장해놓고 바로 멈출 수 있도록 코드를 수정했다.
location이 n^2 인 경우
location이 n^2 인 경우, location과 같은 값을 찾을 때 (1,0)부터 시작하기 때문에, locationX와 locationY 값이 설정되지 않아 자동으로 0 0 으로 출력되는 것이 문제였다.
따라서 locationX와 locationY 를 출력할 때, 해당 값에 1을 더해줄 수 있도록 다음과 같이 코드를 수정했다.
| |
정답 코드
해당 특이 케이스를 반영할 수 있도록 코드를 수정하여 결국 성공할 수 있었다!
| |