Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 이진탐색
- 이코테
- 백준
- 그래프이론
- 프로그래머스
- 주간회고
- 그리디
- Level2
- Level1
- 기술면접
- 알고리즘스터디
- 정렬
- 파이썬 3
- mrc
- dp
- 부스트캠프_AITech_3기
- python3
- 백트랙킹
- U_stage
- Level2_PStage
- 구현
- 글또
- 최단경로
- 부스트캠프_AITech3기
- 알고리즘_스터디
- dfs
- ODQA
- 다시보기
- 개인회고
- 단계별문제풀이
Archives
- Today
- Total
국문과 유목민
[구현] 뱀 본문
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.
소요시간: 1시간 30분 정도 (40분 + 거의 오류 잡는데 40분 + a)
1. 문제 설명
- dummy라는 게임을 구현하는 문제 사과를 먹으면 길이가 늘어나고, 벽이나 자기 몸에 부딪히면 게임 끝
2. 접근 방식
- 뱀의 몸의 경우 deque를 이용해서 길이를 늘려간다. 만약 자기 몸에 부딪히는 경우는 deque에 들어가는 파라메터가 이미 존재하는 경우로 생각했다.
- 초기에 뱀의 움직임을 deque에다가 넣어서 'while deque:' 로 큐가 빌 때까지로 작성하다가, 방향이 바뀌지 않으면 계속 한 방향으로 이동한다는 조건이 있어서 while True로 바꾸고, 뱀의 움직임은 dict형으로 만들었다.
3. 코드
from collections import deque
n = int(input())
m = int(input())
apple_list = [[False]*n for _ in range(n)]
for _ in range(m):
x, y = map(int, input().split())
apple_list[x-1][y-1] = True
l = int(input())
q = {}
for _ in range(l):
x, c = input().split()
q[int(x)]=c
def check_direction(dir_index, direction):
if direction == "D":
dir_index +=1
elif direction == "L":
dir_index -= 1
dir_index %= 4
return dir_index
x, y = 0, 0
snake_body = deque()
snake_body.append((0,0))
dir_index = 0
# 동 남 서 북 (행, 열 / x가 행, y가 열)
x_dir = [0, 1, 0, -1]
y_dir = [1, 0, -1, 0]
time = 0
while True: # 움직일 수 있는 동안
if time in q:
dir_index = check_direction(dir_index, q[time])
time += 1
x, y = x + x_dir[dir_index], y + y_dir[dir_index]
if ((x, y) in snake_body) or x >= n or y >= n or x < 0 or y < 0: # 탈출문
break
else:
snake_body.append((x, y))
if apple_list[x][y] == True:
apple_list[x][y]= False
continue
else:
snake_body.popleft()
print(time)
4. 코멘트
- 예전에 풀었으나 기억이 안 났다. 하지만 예전과 다르게 이번에는 내 손으로 풀었다.
- 백준에서 계속 런타임 에러(NameError)가 떠서 무슨 문제가 있었나 했는데, 변수를 잘못쓰는 오류가 있었다.
- 하지만 덕분에 코드를 더 간추릴 수도 있었고, 부족했던 부분을 보완할 수 있었다.
- 이번 코드에서 deque와 dict형을 사용해 문제를 풀었다는 점에서 나름 만족스럽다.
'알고리즘_코딩테스트 > 이것이 코딩테스트다' 카테고리의 다른 글
[구현] 치킨 배달 (0) | 2021.12.15 |
---|---|
[구현] 기둥과 보 설치 (0) | 2021.12.13 |
[구현] 자물쇠와 열쇠 (0) | 2021.12.13 |
[구현] 문자열 압축 (0) | 2021.12.13 |
[구현] 문자열 재정렬 (0) | 2021.12.13 |