문제
- 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을 더해줄 수 있도록 다음과 같이 코드를 수정했다.
|
|
정답 코드
해당 특이 케이스를 반영할 수 있도록 코드를 수정하여 결국 성공할 수 있었다!
|
|