알고리즘

3190-백준-뱀

2023. 2. 14. 00:29
목차
  1. 1. 문제 출처
  2. 2. 풀이
  3.  

1. 문제 출처

https://www.acmicpc.net/problem/3190

 

3190번: 뱀

 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임

www.acmicpc.net

2. 풀이

몸의 좌표 배열은 머리가 앞에서 추가되고 꼬리는 뒤에서 빠져야 하기 때문에 자료 구조를 덱으로 생각하고 사용 하였고방향 전환 배열은  먼저 추가한 데이터를  먼저 빼서 사용해야 하기 때문에 큐 라고 생각 하고 사용 하였다.

# 필요한 변수 선언 및 초기화
size = int(input())
apple_num = int(input())
apple_list = []
body = [[0,0]]
head_angle = 0
time =0

for _ in range(apple_num):
    apple_list.append(list(map(int,input().split())))
    
line_list = []    
for _ in range(int(input())):
    line_list.append(input().split())

    
# 보고 있는 방향으로 움직이기
def go(x,y,angle):
    if angle == 0 :
        x+=1
    elif angle == 90:
        y+=1
    elif angle == 180:
        x-=1
    else:
        y-=1
    return x,y

# 게임이 끝날 때 까지 반복
while True:
    #뱀 머리의 x,y좌표
    x,y = body[0]
    # 만약 방향 변환 정보 리스트가 비어있지 않으면
    if line_list:
        # 만약 그 정보의 맨 앞의 값이 현재 시간과 같은면
        if int(line_list[0][0]) == time:
            # 회전 방향에 따라 뱀이 보고 있는 방향을 바꾼다.
            direction = line_list.pop(0)[1]
            if direction == "L":
                head_angle -= 90
                if head_angle == -90:
                    head_angle = 270

            if direction == "D":
                head_angle += 90
                if head_angle == 360:
                    head_angle = 0
    # 뱀이 보고 있는 방향으로 움직인다.
    x,y = go(x,y,head_angle)
    # 움직였으니 시간에 1초를 더한다.
    time +=1
    # 움직인 곳에 벽이 있거나 몸이 있으면 시간을 출력하고 반복문 종료
    if (0<=x<size )and (0<=y<size) and ([x,y] not in body):
        # 만약 도착한 좌표가 사과가 있지 않은 곳이면 
        #(사과의 좌표는 1부터 시작해 행,렬 순으로 이루어져 있고 
        # 현재 뱀 머리의 0부터 시작하여 열, 순으로 되어있기 때문에 다음과 같이 비교한다.)
            if [y+1,x+1] not in apple_list:
                # 몸의 길이는 유지 되기 때문에 꼬리부분의 좌표를 뺀다.
                body.pop()
            else:
                # 만약 사과가 있다면 사과를 제거하고 꼬리부분의 좌표를 유지한다.
                apple_list.remove([y+1,x+1])
            # 몸에 머리의 좌표를 앞애 추가한다.
            body.insert(0,[x,y])
    else:
        print(time)
        break

 

'알고리즘' 카테고리의 다른 글

10825-백준-국영수  (1) 2023.02.20
18406 - 백준 - 럭키스트레이트  (0) 2023.02.15
1439-백준-뒤집기  (0) 2023.02.13
2618- 백준 - 경찰차  (0) 2023.02.10
1254-백준-팰린드롬 만들기  (0) 2023.02.09
  • 1. 문제 출처
  • 2. 풀이
  •  
'알고리즘' 카테고리의 다른 글
  • 10825-백준-국영수
  • 18406 - 백준 - 럭키스트레이트
  • 1439-백준-뒤집기
  • 2618- 백준 - 경찰차
easysheep
easysheep
easysheep
나의 개발자 일기
easysheep
전체
오늘
어제
  • 분류 전체보기 (95)
    • 파이썬 (7)
      • 자료형 (0)
      • matplotlib (2)
      • Tensorflow (1)
      • Selenium (1)
      • Numpy (2)
      • Pandas (1)
    • 장난감 프로젝트 (3)
    • AI_수학 (0)
      • 통계 (0)
    • 알고리즘 (63)
      • 브루트 포스 (3)
      • 그리드 알고리즘 (5)
      • 너비 우선 탐색(bfs) (12)
      • 깊이 우선 탐색(DFS) (1)
      • 최단 경로 구하기(플로이드 워셜) (1)
      • 동적 계획법(Dynamic Programming) (8)
      • Dijkstra algorithm(데이크스트라 알.. (6)
    • Backend (1)
      • Django (1)
    • 딥러닝 (1)
      • Regression(회귀) (0)
    • 머신러닝 (3)
      • Daycon (1)
      • 직접 구현 (1)
    • AWS (3)
    • DB (2)
      • MongoDB (2)
    • kubernetes (3)
    • Docker (4)
    • Stress Test Toll (0)
      • Jmeter (0)
      • nGrinder (0)
    • Ubuntu (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 헬름 설치
  • 우분투에 헬름 설치
  • BFS
  • matplotlib
  • heap
  • gradio
  • grafana
  • Python
  • ML
  • Docker
  • Mac
  • dynamic programming
  • 2*n 타일링
  • 너비 우선 탐색
  • validate service connection
  • Bind Mounts
  • Cannot stat file /proc/528/fd/0: Permission denied
  • 파이썬
  • 백준
  • ubuntu
  • 문자열
  • 데이크스트라
  • mysql
  • error
  • aws
  • 머신 러닝
  • 알고리즘
  • Numpy
  • error: version in "./docker-compose.yaml" is unsupported.
  • helm

최근 댓글

최근 글

hELLO · Designed By 정상우.
easysheep
3190-백준-뱀
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.