새소식

알고리즘 문제풀이/BOJ

[백준 알고리즘(BOJ)] 3190번 뱀 자바(java) 풀이

  • -

BOJ 3190번 뱀(snake) 문제 자바(java) 풀이

  • 랭크 : 실버 1
  • 백준 온라인 저지(BOJ) 3190번 뱀(snake) 문제 자바 풀이
  • 백준3190번 뱀

코드

저는 푸는데 1시간 좀 넘게 걸렸어요
아래의 깃허브를 참고해주세요!!
백준3190번 뱀


문제이해

  1. 시작시 뱀은 맨위 맨 좌측에 위치.
  2. 처음에 오른쪽으로 향하며 초기 뱀의 길이는 1이다.
  3. 몸길이를 늘려 머리를 먼저 다음 칸에 가져다 댄다.
  4. if 사과 exists: 사과 없어지고 꼬리는 움직이지 않음 ( 몸 길이 늘어남 )
  5. if !사과 exsists: 몸 길이를 줄여 꼬리가 위치한 칸을 비워줌 ( 몸 길이 그대로 )
  6. 게임이 끝나는 시간 계산하기 ( 벽 또는 자기자신의 몸과 부딪히면 게임 끝)
  7. 벽은 상하좌우 끝에 있다.

문제 풀이

  1. 뱀 초기 위치를 queue와 map에 넣는다.

  2. 사과 위치 정보를 받아서 map에 표시한다.

  3. 방향 변환 정보를 담아서 queue에 넣는다.

  4. 방향에 따라서 전진하는 곳이 어딘지 판단한다.

  5. 시간을 증가 시킨다

  6. 벽과 부딪히지 않앗는지, 자기 몸과 부딪히지 않았는지 검사한다.
    *5.1 전진하는데 사과가 있다면 map을 갱신해주고 뱀의 위치 정보를 담는 snake queue에 추가한다.
    *5.2 사과가 없다면 전진하고 꼬리를 없앤다. snake에서도 꼬리 정보를 빼내고 새로운 머리 위치를 넣어준다.

     * 5.2.1 뱀의 크기가 1보다 크면 queue의 맨 앞의 위치를 꼬리의 위치로 갱신해준다.
     * 5.2.2 뱀의 크기가 1이라면 머리와 꼬리가 같다.
  7. 명령을 담은 queue가 비어있지 않은 경우, 현재 시간과 같다면 명령대로 방향을 튼다.

  8. 이렇게 벽을 만나거나 자기 몸에 닿을때까지 반복한다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.