[백준] 1063 킹 - 구현

jckim22·2023년 7월 24일
0

[ALGORITHM] STUDY (PS)

목록 보기
41/86

난이도

Silver 3

풀이 참고 유무

X

막힌 부분

X

문제

문제 바로가기

입력

첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.

출력

첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.

예제 입력

C1 B1 3
L
T
LB

예제 출력

B2
A1

문제 검토

여러가지 경우의 수를 고려하여 잘 구현하면 되는 문제이다.

풀이(python)

Python

k,s,n=input().split()
n=int(n)
case=[input() for _ in range(n)]
#방향벡터 설정
move=['R','L','B','T','RT','LT','RB','LB']
dr=[0,0,-1,1,1,1,-1,-1]
dc=[1,-1,0,0,1,-1,1,-1]
king=[]
stone=[]
#킹과 돌의 위치를 숫자 인덱스 좌표로 변경
for x in k:
    if x.isalpha():
        king.append(ord(x)-65)
        continue
    king.append(int(x)-1)
for x in s:
    if x.isalpha():
        stone.append(ord(x)-65)
        continue
    stone.append(int(x)-1)
#row와 col에 순서에 맞게 스왑
king[0],king[1]=king[1],king[0]
stone[0],stone[1]=stone[1],stone[0]
for cs in case:
    for x in range(len(move)):
        #킹의 현재위치 (이동용)
        nr=king[0]
        nc=king[1]
        #돌의 현재위치 (이동용)
        nrs=stone[0]
        ncs=stone[1]
        #킹의 현재위치 (되돌리기용)
        nrh=king[0]
        nch=king[1]
        #방향이동
        if cs == move[x]:
            nr+=dr[x]
            nc+=dc[x]
            if nr<0 or nr>7 or nc<0 or nc>7:
                continue
            king[0]=nr
            king[1]=nc
            if king[0]==stone[0] and king[1]==stone[1]:
                nrs+=dr[x]
                ncs+=dc[x]
                if nrs<0 or nrs>7 or ncs<0 or ncs>7:
                    king[0]=nrh
                    king[1]=nch
                    continue
                stone[0]=nrs
                stone[1]=ncs
#정답으로 변환        
k=''
s=''                
k+=chr(king[1]+65)
k+=str(king[0]+1)
s+=chr(stone[1]+65)
s+=str(stone[0]+1)
print(k)
print(s)

주어진 정보를 리스트에 담고 조건들을 잘 구현하면 된다.

걸린 시간

34:12

총평

실버 3이라서 A4에 쓰지 않고 대충 풀었다가 방향벡터를 설정하는 과정에서 방향을 제대로 설정하지 않아서 시간을 많이 허비했다.

처음에는 딕셔너리를 사용하려 했고 다른 사람의 풀이를 보니 딕셔너리가 정석인 것 같지만, 문제 풀 때 자주 사용하게 될 방향벡터를 사용해서 풀어보았다.

구현 문제에서는 실수하지 않게 중간 중간 디버깅을 꼭 해주자

profile
개발/보안

0개의 댓글