BOJ 3190번 뱀(snake) 문제 자바(java) 풀이
- 랭크 : 실버 1
- 백준 온라인 저지(BOJ) 3190번 뱀(snake) 문제 자바 풀이
- 백준3190번 뱀
코드
저는 푸는데 1시간 좀 넘게 걸렸어요
아래의 깃허브를 참고해주세요!!
백준3190번 뱀
문제이해
- 시작시 뱀은 맨위 맨 좌측에 위치.
- 처음에 오른쪽으로 향하며 초기 뱀의 길이는 1이다.
- 몸길이를 늘려 머리를 먼저 다음 칸에 가져다 댄다.
- if 사과 exists: 사과 없어지고 꼬리는 움직이지 않음 ( 몸 길이 늘어남 )
- if !사과 exsists: 몸 길이를 줄여 꼬리가 위치한 칸을 비워줌 ( 몸 길이 그대로 )
- 게임이 끝나는 시간 계산하기 ( 벽 또는 자기자신의 몸과 부딪히면 게임 끝)
- 벽은 상하좌우 끝에 있다.
문제 풀이
-
뱀 초기 위치를 queue와 map에 넣는다.
-
사과 위치 정보를 받아서 map에 표시한다.
-
방향 변환 정보를 담아서 queue에 넣는다.
-
방향에 따라서 전진하는 곳이 어딘지 판단한다.
-
시간을 증가 시킨다
-
벽과 부딪히지 않앗는지, 자기 몸과 부딪히지 않았는지 검사한다.
*5.1 전진하는데 사과가 있다면 map을 갱신해주고 뱀의 위치 정보를 담는 snake queue에 추가한다.
*5.2 사과가 없다면 전진하고 꼬리를 없앤다. snake에서도 꼬리 정보를 빼내고 새로운 머리 위치를 넣어준다.
* 5.2.1 뱀의 크기가 1보다 크면 queue의 맨 앞의 위치를 꼬리의 위치로 갱신해준다.
* 5.2.2 뱀의 크기가 1이라면 머리와 꼬리가 같다.
-
명령을 담은 queue가 비어있지 않은 경우, 현재 시간과 같다면 명령대로 방향을 튼다.
-
이렇게 벽을 만나거나 자기 몸에 닿을때까지 반복한다.