본문 바로가기

알고리즘/삼성 기출

뱀 [백준 3190번]

문제

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

 

3190번: 뱀

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

www.acmicpc.net

 

내 풀이

 

뱀을 deque로 만들었다.

2차원 배열로 보드를 만들어서 구현하는 방법도 있지만, 나는 뱀, 사과 위치를 담은 리스트, 방향 변환 명령을 담은 리스트를 가지고 구현을 하였다.

 

뱀의 꼬리가 잘리는 것을 deque의 맨 앞의 원소를 빼내는 것으로 구현하였다.

 

from collections import deque

N = int(input())
K = int(input())
apple = []
for i in range(K):
    r, c = map(int, input().split())
    apple.append((r-1, c-1))
change = []
L = int(input())
for i in range(L):
    X, C = input().split()
    change.append((int(X), C))

dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
dq = deque()
dir, time = 0, 0
X, C = None, None

dq.append((0, 0))
if change:
    X, C = change.pop(0)

while True:
    x, y = dq[-1]
    nx, ny = x+dx[dir], y+dy[dir]
    
    if nx < 0 or N <= nx or ny < 0 or N <= ny: break
    if (nx, ny) in dq: break
    
    dq.append((nx, ny))
    if (nx, ny) in apple:
        apple.remove((nx, ny))
    else:
        dq.popleft()
    
    time += 1
    
    if time == X:
        if C == 'L': dir = (dir-1)%4
        else: dir = (dir+1)%4
        if change: X, C = change.pop(0)

print(time+1)

 

총평

변수명 헷갈리지 않게 잘 짓자.

변수명 중복때문에 어디서 틀렸는지 몰라서 좀 헤맸다.

오늘부터 난 '덜렁이'다.

'알고리즘 > 삼성 기출' 카테고리의 다른 글

퇴사 [백준 14501번]  (0) 2022.09.22
테트로미노 [백준 14500번]  (0) 2022.09.19
로봇 청소기 [백준 14503번]  (1) 2022.09.16
연구소 [백준 14502번]  (0) 2022.08.29
주사위 굴리기 [백준 14499번]  (0) 2022.08.27