반응형
https://www.acmicpc.net/problem/8911
거북이 로봇이 좌표 ( 0, 0 ) 을 시작으로 움직인다. 알파벳으로 명령을 하게 되는데,
- F: 한 눈금 앞으로
- B: 한 눈금 뒤로
- L: 왼쪽으로 90도 회전
- R: 오른쪽으로 90도 회전 이다.
주의할 점은, L과 R 명령일 때는 움직이지 않고 현재 내 좌표에서 방향만 바꾸는 것이다.
각각의 케이스에 대하여, 거북이의 이동좌표를 모두 포함하는 가장 작은 직사각형의 넓이를 출력하면 된다.
즉, (0,0) -> (0,1) -> (0,2) -> (1,2) 로 이동하였다면 정답은 2가 되는 것이다.
이 문제는 문제를 보며 해결 과정을 하나씩 발견해가며 그 과정을 소스코드로 바꾸는 '구현(Implementation)' 유형이다.
코드는 다음과 같다.
n = int(input())
dx = [0,-1,0,1]
dy = [1,0,-1,0] # 북 서 남 동
for i in range(n):
pos_x = 0
pos_y = 0
pos_dir = 0 # 0북 1서 2남 3동
move = list(input())
trace = [(pos_x, pos_y)]
for j in move:
if j == 'F':
pos_x = pos_x + dx[pos_dir]
pos_y = pos_y + dy[pos_dir]
elif j == 'B':
pos_x = pos_x - dx[pos_dir]
pos_y = pos_y - dy[pos_dir]
elif j == 'L':
if pos_dir == 3:
pos_dir = 0
else:
pos_dir += 1
elif j == 'R':
if pos_dir == 0:
pos_dir = 3
else:
pos_dir -= 1
trace.append((pos_x, pos_y))
width = max(trace, key = lambda x:x[0])[0] - min(trace, key = lambda x:x[0])[0]
height = max(trace, key = lambda x:x[1])[1] - min(trace, key = lambda x:x[1])[1]
print(width * height)
궁금한 점이 있으면 언제든지 댓글 남겨주세요
전체 문제 & 코드는 위의 깃에 정리되어 있습니다.
팔로우 & 맞팔은 환영입니다 !
반응형
'Algorithm > Implementation' 카테고리의 다른 글
[백준] 1193 분수찾기 (Python 파이썬) (0) | 2021.04.12 |
---|---|
[백준] 5212 지구온난화 (Python 파이썬) (0) | 2021.01.29 |
[백준] 3107 ipv6 (Python 파이썬) (0) | 2021.01.29 |
[백준] 14500 테트로미노 (Python 파이썬) (0) | 2021.01.28 |
[백준] 3020번 개똥벌레 (Python 파이썬) 누적합 (0) | 2021.01.27 |