Skip to content

Latest commit

 

History

History

3190

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

문제풀이

사과의 위치와 뱀의 이동경로가 주어졌을 때 게임이 몇 초후에 끝나는지 구하기

입력

  • n : 가로, 세로 맵의 크기
  • k : 사과의 갯수
  • kArr : 사과의 위치가 담긴 배열
  • l : 뱀의 방향전환 정보 갯수
  • lArr : x 초후에 c 방향으로 반환 전환하는 정보가 담긴 배열

로직

  1. 뱀의 이동 경로를 저장하기 위한 visited 배열을 생성한다 (1)
  2. visited 배열에 사과의 위치를 기록한다 (2)
  3. 방향전환을 위한 directions 배열을 선언한다 (반시계방향)
    • 시작은 오른쪽 이동(0,1)
    • L은 왼쪽 방향이고 direction에서 인덱스로 +1 이동한 좌표 (반시계)
    • D는 오른쪽 방향이고 direction에서 인덱스로 +3 이동한 좌표 (시계)
  4. 앞뒤로 데이터를 추가/제거 할 수 있는 dequeue 처럼 사용할 배열을 선언한다 (초기값 [0, 0])
  5. dequeue가 있으면 반복한다
    1. 걸리는 시간을 기록한다
    2. dequeue에서 뱀의 머리 좌표를 읽는다
    3. 뱀의 새 머리 좌표를 구한다
    4. 새 머리 좌표가 몸통이거나 범위를 벗어나면 반복문을 종료한다
    5. 새 머리 좌표에 사과가 있으면 먹고(0으로 변경) 없으면 dequeue에서 꼬리를 제거한다음 visited에서 미방문 처리한다
    6. 새 머리 좌표를 visitied 배열에 기록하고 dequeue 배열의 앞에 추가한다
    7. 기록한 시간이 방향전환 배열에 있는 시간에 도달하면 방향을 전환한다
  6. 총 걸린 시간을 반환

맞왜틀

  • 사과가 없으면 미방문 처리 하는 부분에서 dequeue에서 꼬리 좌표를 꺼내야하는데 visited[y][x] = 0으로 이전 머리의 위치를 미방문 처리 해서 몸통이 제대로 기록되지 않았음 (5-5)
  • 입력값에서 사과의 좌표가 (0, 0)이 (1, 1)로 주어지는것을 인지하지 못해서 잘못된 사과 좌표를 기록함 (2)