문제 : https://www.acmicpc.net/problem/3190
최적화와 기타등등 아무것도 신경안쓴 누더기 코드를 보는 당신! 축하드립니다.
잘난 코드는 다들 비슷하지만 못난 코드는 개성있게 못났다는 사실을 기억하십시오
뱀 문제는 문제를 그대로 구현하면 된다.
나는 dictionary를 잘 쓰니까 요번에도 사과 + 위치변경 확인용으로 썼다.
신경써야 할 곳은 다음과 같다.
- 벽에 부딪히면 끝
- 자기 몸에 부딪히면 끝
- 사과 다먹는다고 끝 아님
몸은 Deque를 써 pop,appendleft로 길이조절 하기가 쉬워졌다.
사실 저 numapple은 안써도 된다. 3번 조건을 멋대로 만들어버렸다.
나머지 코드는 보면 이해할만 하니 패스.
import sys
from collections import deque
dx = [1,0,-1,0]
dy = [0,1,0,-1]
def changedir(c,v):
if c=="L":
return (v+3)%4
elif c=="D":
return (v+1)%4
else:
return v
apple = dict()
movement = dict()
n = int(input())
k = int(input())
numapple = k
ret = 1
for a in range(k):
apple[tuple([int(i)-1 for i in sys.stdin.readline().rstrip().split()])] = True
l = int(input())
for a in range(l):
k,v = [i for i in sys.stdin.readline().rstrip().split()]
movement[int(k)] = v
q = deque()
q.append((0,0))
vector = 0
while True:
if (q[0][0]+dy[vector],q[0][1]+dx[vector]) in q:
print(ret)
sys.exit()
else:
q.appendleft((q[0][0]+dy[vector],q[0][1]+dx[vector]))
if q[0] in apple:
if apple[q[0]]:
apple[q[0]] = False
numapple-=1
else:
q.pop()
else:
q.pop()
if ret in movement:
if movement[ret] =="L" or movement[ret] =="D":
vector = changedir( movement[ret] ,vector)
movement[ret] = "0"
if q[0][0]>=n or q[0][0]<0 or q[0][1]>=n or q[0][1]<0 :
print(ret)
sys.exit()
else:
ret+=1
'취준 > 백준' 카테고리의 다른 글
[백준][Python][10942][DP] 팰린드롬? (0) | 2020.02.12 |
---|---|
[백준][Python][1890][DP]점프 (0) | 2020.02.11 |
[백준][9095][Python][DP] 1,2,3 더하기 (0) | 2020.02.09 |
[백준][Python][10971][브루트포스] 외판원 순회 2 (0) | 2020.02.08 |
[백준][Python][11057][DP] 오르막 수 (0) | 2020.02.05 |