백준 3190번 뱀 (삼성 SW 역량테스트 기출문제)


사용한 알고리즘 : 구현...?

뱀을 head 와 tail 로 나누어 각각의 위치정보를 pair<int, int> 로 저장하여 진행하였습니다.
입력으로 주어지는 각각의 방향전환을 vector 안에 넣어 놓고,
하나씩 꺼내면서 방향전환이 이루어 질 때 까지 이전 방향으로 뱀의 head가 직진하였고,
head가 직진한 위치 정보들을 queue안에 저장하였습니다.
이때, head가 가는 블록에 사과가 있는 경우는 tail의 위치를 그대로 하고,
사과가 없는 경우에만 queue에 저장된 head가 지나갔던 길들을 따라 진행시켰습니다.

이 과정에서 bool 행렬(snake라는 이름)을 만들어서
head가 지나갈 때 해당 블록위치를 true로 해주고, tail이 지나갈때 false로 바꾸어 주었습니다.

뱀은 벽에 부딪히거나, 자신의 몸에 (즉, snake라는 bool 함수가 true인 지점) 부딪히면 죽게 되므로 이를 판단해 주면 됐습니다.

방향은 오른쪽:(+0,+1), 아래쪽:(+1,+0), 왼쪽:(+0,-1), 위쪽:(-1,+0) 을 각각 0,1,2,3의 번호를 붙여 생각했으며 ( 즉, 오른쪽을 향하는건 0의 방향, 아래쪽 향하는건 1의 방향 식으로.....)
방향 전환이 'L'이 들어오면 진행방향-1 , 'R'이 들어오면 진행방향+1 을 해주었습니다.

예를 들어 2의 방향(왼쪽) 으로 진행하던 도중, 'L'이 들어오면, 진행방향-1 의 방향으로 전환, 즉 2-1 = 1 : 아래쪽 방향 으로 진행하게 됩니다.

입력 들어오는 그대로 따라가면 되는 문제였지만,
구현할 때 실수 할 수 있는 점이 많아서 까다로울 수 있는 문제였습니다.










댓글