[이코테] 왕실의 나이트 - 구현(시뮬레이션)

jckim22·2023년 7월 3일
0

[ALGORITHM] STUDY (PS)

목록 보기
11/86

1. 문제 설명

2. 문제 검토

이 또한 주어진 경우를 시뮬레이션을 돌려보는 문제이므로 구현(시뮬레이션) 유형의 문제라고 할 수 있다.

3. 풀이

v = input()

x = int(v[1])
y = ord(v[0])-96
cnt = 0

# 동서남북 방향벡터
dx = [0,0,1,-1]
dy = [1,-1,0,0]
move_type = ['R','L','S','N']
moving = [
['R','R','S'],
['R','R','N'],
['L','L','S'],
['L','L','N'],
['N','N','R'],
['S','S','L'],
['N','N','L'],
['S','S','R']
]

for moves in moving:
    nx = x
    ny = y
    for move in moves:
        for i in range(len(move_type)):
            if move == move_type[i]:
                nx+=dx[i] 
                ny+=dy[i]
            
    if nx > 8 or ny > 8 or nx < 1 or ny < 1:
        continue
    cnt +=1
    
    
print(cnt)          
    

처음 접근했던 풀이이다.
아스키 코드를 숫자로 변환하고 모든 경우의 수를 리스트로 담아 시뮬레이션을 돌린다는 점에서 정석 풀이와 같았지만, 코드의 간결함에서 차이가 났다.
나는 이전 문제에서 배웠던 것과 같이 dx,dy로 방향벡터를 설정해주었고 방향들을 설정에 좌표 1을 움직이는 모든 시뮬레이션을 돌렸다.
그래서 3중 for문이 필요했다.

v = input()

x = int(v[1])
y = ord(v[0])-96
cnt = 0


movings = [[2,1],[-2,1],[2,-1],[-2,-1],[1,2],[1,-2],[-1,2],[-1,-2]]

for moving in movings:
    nx = x
    ny = y
    
    nx += moving[0]
    ny += moving[1]
    
    if nx > 8 or ny > 8 or nx < 1 or ny < 1:
        continue
    cnt +=1
    
print(cnt)

풀이를 보고 힌트를 얻고 다시 작성한 코드이다.
이 문제에서는 한 칸씩 이동하는 것이 아니고 정해진 경우의 루트를 이동하는 것이기 때문에 정해진 루트를 이동할 때 소요되는 좌표들을 방향벡터로 리스트에 담아주었다.

결론적으로 for문은 한번 밖에 사용하지 않았다.

4. 걸린 시간

18분 06초

5. 총평

방향 벡터를 좀 더 자유롭게 사용할 수 있다는 것을 알았다.

profile
개발/보안

0개의 댓글