본문 바로가기

프로그래밍 회고록/Python

2021.10.24 코테_상하좌우

728x90
반응형

# 오늘의 문제

이것이 코딩 테스트다. 챕터4-1 110page 상하좌우

# 나의 코드

#기본 코드 변수들 세팅
n = int(input())
move = list(map(str , input().split()))
loca = [1,1]

#move인자 받아서 루프돌려서
for dir in move:
	#각 인자에 따른 이프문 세팅
    if dir == 'R' and loca[1] != 5:
      loca[1] = loca[1] + 1
    elif dir == 'L' and loca[1] != 1:
      loca[1] = loca[1] - 1   
    elif dir == 'U' and loca[0] != 1:
      loca[0] = loca[0] - 1
    elif dir == 'D' and loca[0] != 5:
      loca[0] = loca[0] + 1
#프린트
print(loca)

# 정답과의 비교

1. 변수 세팅을 받을때 나는 move 변수 그러니까 이동할 범위를 좀더 복잡하게 리스트로 만들었지만 아래의 코드는 훨씬 간결하게 만들었다.

2. dx 와 dy변수 그리고 move_types라는 변수를 리스트화 해서 for문을 돌릴때 move_types리스트 길이의 범위만큼 포문을 돌면서 값이 같다면 dx dy의 i번째 변수가 행해야 할 행위와 move_types의 스트링이 행해야 할 행위가 같으니 그것을 모두 연산해서 값을 저장 한 후 if문으로 예외조건 거르고 마지막에 nx ny라는 임시값과 x,y를 치환한게 내 코드보다 자료구조를 훨씬 유연하게 사용했다.

n = int(input())
x,y = 1,1
plans = input().split()

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 ny > n :
    	continue
    x,y = nx, ny
    
print(x,y)
728x90