6. 구현 : 상하좌우 움직이기
2021. 11. 13. 20:11ㆍ파이썬/알고리즘
input:
자연수 N을 입력 받는다.
공백으로 띄워진 문자 L, R, U, D를 입력 받는다.
rule :
N * N의 크기 정사각형, 내부는 1 * 1 크기의 정사각형 이루어져 있음.
(1, 1) 부터 (N, N)
이 사각형 내부에서 벗어날 수 없으며 안 쪽에서만 움직일 수 있음.
L, R, U, D
왼쪽, 오른쪽, 위, 아래로 한 칸 씩 이동할 수 있음.
N = int(input())
str_list = input().split()
total = []
location = [1,1]
# for i in range(N) :
# row_list = [(i+1,j+1) for j in range(N)]
# total.append(row_listx = locationy = location[0]
for str_ in str_list:
if str_ == 'L':
location[1] -= 1
if location[1] == 0:
location[1] = 1
elif str_ == 'R':
location[1] += 1
if location[1] > N:
location[1] -= 1
elif str_ == 'U':
location[0] -= 1
if location[0] == 0:
location[0] = 1
elif str_ == 'D':
location[0] += 1
if location[0] > N:
location[0] -= 1
print(location[0],location[1])
위 코드는 내가 처음 짠 코드 ㅠㅠ 잘 작동 하긴 하는데 너무 중구난방인 것 같다.
게다가 주석 처리한 부분은 너무 어렵게 접근한 것 같다.. 이 쉬운 문제에 시간을 얼마나 쓴 거야..
n = int(input())
str_list = input().split()
x, y = 1,1
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']
for plan in str_list:
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
x,y = nx,ny
print(x,y)
동일한 크기의 배열과 서로 매칭되는 만들어주고 인덱스를 쉽게 활용할 수 있게 만든 것 같다.
실제로 변수를 수정하고 임시 변수에 저장한 뒤 조건에 맞을 경우
실제로 변수에 저장하는 부분이 독립된 것이 인상적이다.
반응형
'파이썬 > 알고리즘' 카테고리의 다른 글
| 8. 구현 : 체스 나이트의 경우의 수 (0) | 2021.11.14 |
|---|---|
| 7. 구현 : 시각 (0) | 2021.11.14 |
| 5. 구현 : 문제 풀이 전략 (0) | 2021.11.13 |
| 4. 그리디 알고리즘 : 1이 될 때 까지 (0) | 2021.11.13 |
| 3. 그리디 알고리즘 : 카드 게임 (0) | 2021.11.13 |