새소식

Programming/Algorithm

[구현 알고리즘] 문제: 상하좌우

  • -

https://www.youtube.com/watch?v=2zjoKjt97vQ&t=1326s

본 내용은 위의 동영상을 참고해서 작성했습니다~

문제: 상하좌우

출처: 동빈나 유투브

  • 시작 좌표 (1,1) 
  • 공간밖은 무시됨. 

출처: 동빈나 유투브

문제 해결 아이디어

출처: 동빈나 유투브

# 행렬 예시
for i in range(5):
    for j in range(5):
        print('(', i, ',', j, ')')
    print()
#%%
#동, 북, 서, 남
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]

# 현재 위치
x, y = 1, 1

for i in range(4):
    # 다음 위치
    nx = x + dx[i]
    ny = y + dy[i]
    print(nx, ny)
#%% md
* 문제를 풀기전에 구현에 대해서 배울 때 사용했던 짧은 코드를 가져왔다. 
* 처음 위치는 1,1이고 for 반복문을 통해서 움직일 수 있다. 
#%%
num = int(input())
list1 = input().split()
x, y = 1, 1
# print(list1)
for i in list1:
    # if 문자열이 R이라면 이동
    if i == 'R' and y < num:
        y += 1
    elif i == 'L' and y > 1:
        y -= 1
    elif i == 'U' and x > 1:
        x -= 1
    elif i == 'D' and x < num:
        x += 1
    print(i, 'x = ', x, ', ', 'y = ', y)
#%% md
* 처음에 문자열 입력을 잘못했다. split() 까먹지 말자. 
* x, y의 방향이 헷갈린다. 방향 좌표이기 때문에 좌표축이랑은 다르다. 오른쪽으로 가면 y가 증가하는 것이다. 
* 대충 이런식으로 풀었는데 풀이를 한 번 봐보자..
#%% md
## 풀이
#%%
# N 입력 받기
n = int(input())
x, y = 1, 1
plans = input().split()

# L, R, U, D에 따른 이동 방향
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']

# 이동 계획을 하나씩 확인하기
for plan in plans:
    # 이동 후 좌표 구하기
    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 nx > n:
        continue
    # 이동 수행
    x, y = nx, ny
print(x, y)
#%% md
* 내 직관적인 생각과는 상반되는 너무나도 깔끔한 코드~~~
* 언제쯤 나도 이런 코드를 짤 수 있을까
* 다음주에 다시 짜봐야지 ㅋㅋㅋ 너무 깔끔하당
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.