백준 8911 거북이
https://www.acmicpc.net/problem/8911
8911번: 거북이
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 컨트롤 프로그램이 주어진다. 프로그램은 항상 문제의 설명에 나와있는 네가지 명령으로만 이루어져
www.acmicpc.net
코드
맞았습니다가 뜬 코드입니다.
메모리 30752KB | 시간 1976ms | 코드 길이 1424B
import sys
N = int(sys.stdin.readline().rstrip())
wide_li = []
for _ in range(N):
turtle = list(map(str, sys.stdin.readline().rstrip()))
dis = 0 # 북쪽 0 , 동쪽 1 , 남쪽 2 , 서쪽 3
m = [0, 0, 0, 0] # 최소 x : m[0], 최대 x : m[1], 최소 y : m[2], 최대 y : m[3]
now = [0, 0] # 현재 위치 (x, y)
for t in turtle:
if t == 'F':
if dis == 0: # 북
now[0] += 1
elif dis == 2: # 남
now[0] -= 1
elif dis == 1: # 동
now[1] += 1
else: # 서
now[1] -= 1
m[0] = min(m[0], now[0])
m[1] = max(m[1], now[0])
m[2] = min(m[2], now[1])
m[3] = max(m[3], now[1])
elif t == 'B':
if dis == 0: # 북
now[0] -= 1
elif dis == 2: # 남
now[0] += 1
elif dis == 1: # 동
now[1] -= 1
else: # 서
now[1] += 1
m[0] = min(m[0], now[0])
m[1] = max(m[1], now[0])
m[2] = min(m[2], now[1])
m[3] = max(m[3], now[1])
elif t == 'L': # 왼쪽일 때
if dis == 0: # dis는 0~3 이므로 0일경우 3으로
dis = 3
else: # dis --
dis -= 1
else: # 오른쪽일 때
if dis == 3: # dis는 0~3 이므로 3일경우 0으로
dis = 0
else: # dis ++
dis += 1
wide = (m[1] - m[0]) * (m[3] - m[2]) # 넓이 구하기
wide_li.append(wide)
for i in wide_li:
print(i)
방향을 dis에 저장하고, 최대최소 x, y는 배열 하나에 저장한 것 말고는 딱히 설명할 게 없네요.
후기
거! 룩한 인생 고귀한 삶을 살며
북! 그럼 없는 투명한 마음으로
이! 내 삶이 끝날 그 마지막 순간에 나 웃어보리라 나 바라는대로~
'코딩테스트' 카테고리의 다른 글
[백준] 20309 트리플 소트 - python (0) | 2023.01.30 |
---|---|
[백준] 3182 한동이는 공부가 하기 싫어! - python (0) | 2023.01.30 |
[백준] 16131 기숙사 서바이벌 (Dormvival Games) - python (2) | 2023.01.28 |
[백준] 3048 개미 - python (1) | 2023.01.28 |
[백준] 2870 수학숙제 - python (1) | 2023.01.27 |