문제요약




나의 코드 및 설명
- 킹, 돌 위치를 리스트에 저장하고, 아스키 코드를 통해 숫자로 변환한다.
- 딕셔너리를 통해 킹과 돌을 어떻게 이동할 수 있는지에 대한 정보를 표현한다.
- 이동 후의 킹이 범위를 벗어나면 다음 이동을 수행하고, 벗어나지 않는다면 이동을 수행한다. 이 때, 킹이 가려는 방향에 돌이 놓여져 있다면 돌을 킹이 이동하려는 방향으로 이동시키고, 킹을 이동한다. 그렇지 않다면 킹만 이동한다.
- 이동이 끝난 킹과 돌을 다시 아스키코드를 통해 변환하여 결과를 출력한다.
king, stone, n = input().split()
chess = [[0] * 8 for _ in range(8)]
king_list = list(king) #["A","1"]
stone_list = list(stone)
king = [ord(king_list[0])-65, int(king_list[1])-1]
stone = [ord(stone_list[0])-65, int(stone_list[1])-1]
# T R B L / LT RT RB LB
# dx = [0,1,0,-1,-1,1,1,-1]
# dy = [1,0,-1,0,1,1,-1,-1]
dir_x = {"T":0, "R":1, "B":0, "L":-1, "LT":-1, "RT":1, "RB":1, "LB":-1}
dir_y = {"T":1, "R":0, "B":-1, "L":0, "LT":1, "RT":1, "RB":-1, "LB":-1}
king_nx, king_ny, stone_nx, stone_ny = 0,0,0,0
for _ in range(int(n)):
direction = input()
king_nx = king[0] + dir_x[direction]
king_ny = king[1] + dir_y[direction]
stone_nx = stone[0] + dir_x[direction]
stone_ny = stone[1] + dir_y[direction]
#이동 후의 킹이 범위를 벗어나면 다음 이동 수행
if king_nx < 0 or king_nx > 7 or king_ny < 0 or king_ny > 7:
continue
#벗어나지 않는다면
else:
#킹이 가는 방향에 돌이 있다면
if king_nx == stone[0] and king_ny == stone[1]:
#이동 후의 돌이 범위를 벗어나면 다음 이동 수행
if stone_nx < 0 or stone_nx > 7 or stone_ny < 0 or stone_ny > 7:
continue
#벗어나지 않는다면 킹, 돌 이동
else:
king[0],king[1] = king_nx, king_ny
stone[0],stone[1] = stone_nx, stone_ny
#킹이 가는 방향에 돌이 없다면
else:
#킹만 이동
king[0],king[1] = king_nx, king_ny
print(chr(king[0]+65),king[1]+1,sep="")
print(chr(stone[0]+65),stone[1]+1,sep="")
피드백
1시간 정도 걸린 것 같다. 30분 내에 풀 수 있었는데 1시간동안이나 헤맸다. 분명히 맞게 잘 구현한 것 같은데 결과가 이상하게 출력되었다. 다시 보니 킹과 돌이 이동할 수 있는 범위 설정이 잘못되어 있었다. x축 y축 모두를 따져야 하는데, 한 가지 경우만 따지는 바람에 오래 걸렸다. 어쩐지.. A0이 출력되더라.. 0은 나올 수가 없는데.. 킹받는다.. 다음부턴 이동 가능 범위 설정에 대해 더 주의해야겠다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 2292 벌집 (브론즈2) (0) | 2023.03.21 |
---|---|
[백준] 2304 창고 다각형 (실버2) (0) | 2023.03.20 |
[백준] 13300 방 배정 (브론즈2) / 딕셔너리 (0) | 2023.03.18 |
[백준] 2999 비밀 이메일 (브론즈1) (0) | 2023.03.17 |
[백준] 10709 기상캐스터 (실버5) (0) | 2023.03.16 |
문제요약




나의 코드 및 설명
- 킹, 돌 위치를 리스트에 저장하고, 아스키 코드를 통해 숫자로 변환한다.
- 딕셔너리를 통해 킹과 돌을 어떻게 이동할 수 있는지에 대한 정보를 표현한다.
- 이동 후의 킹이 범위를 벗어나면 다음 이동을 수행하고, 벗어나지 않는다면 이동을 수행한다. 이 때, 킹이 가려는 방향에 돌이 놓여져 있다면 돌을 킹이 이동하려는 방향으로 이동시키고, 킹을 이동한다. 그렇지 않다면 킹만 이동한다.
- 이동이 끝난 킹과 돌을 다시 아스키코드를 통해 변환하여 결과를 출력한다.
king, stone, n = input().split()
chess = [[0] * 8 for _ in range(8)]
king_list = list(king) #["A","1"]
stone_list = list(stone)
king = [ord(king_list[0])-65, int(king_list[1])-1]
stone = [ord(stone_list[0])-65, int(stone_list[1])-1]
# T R B L / LT RT RB LB
# dx = [0,1,0,-1,-1,1,1,-1]
# dy = [1,0,-1,0,1,1,-1,-1]
dir_x = {"T":0, "R":1, "B":0, "L":-1, "LT":-1, "RT":1, "RB":1, "LB":-1}
dir_y = {"T":1, "R":0, "B":-1, "L":0, "LT":1, "RT":1, "RB":-1, "LB":-1}
king_nx, king_ny, stone_nx, stone_ny = 0,0,0,0
for _ in range(int(n)):
direction = input()
king_nx = king[0] + dir_x[direction]
king_ny = king[1] + dir_y[direction]
stone_nx = stone[0] + dir_x[direction]
stone_ny = stone[1] + dir_y[direction]
#이동 후의 킹이 범위를 벗어나면 다음 이동 수행
if king_nx < 0 or king_nx > 7 or king_ny < 0 or king_ny > 7:
continue
#벗어나지 않는다면
else:
#킹이 가는 방향에 돌이 있다면
if king_nx == stone[0] and king_ny == stone[1]:
#이동 후의 돌이 범위를 벗어나면 다음 이동 수행
if stone_nx < 0 or stone_nx > 7 or stone_ny < 0 or stone_ny > 7:
continue
#벗어나지 않는다면 킹, 돌 이동
else:
king[0],king[1] = king_nx, king_ny
stone[0],stone[1] = stone_nx, stone_ny
#킹이 가는 방향에 돌이 없다면
else:
#킹만 이동
king[0],king[1] = king_nx, king_ny
print(chr(king[0]+65),king[1]+1,sep="")
print(chr(stone[0]+65),stone[1]+1,sep="")
피드백
1시간 정도 걸린 것 같다. 30분 내에 풀 수 있었는데 1시간동안이나 헤맸다. 분명히 맞게 잘 구현한 것 같은데 결과가 이상하게 출력되었다. 다시 보니 킹과 돌이 이동할 수 있는 범위 설정이 잘못되어 있었다. x축 y축 모두를 따져야 하는데, 한 가지 경우만 따지는 바람에 오래 걸렸다. 어쩐지.. A0이 출력되더라.. 0은 나올 수가 없는데.. 킹받는다.. 다음부턴 이동 가능 범위 설정에 대해 더 주의해야겠다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 2292 벌집 (브론즈2) (0) | 2023.03.21 |
---|---|
[백준] 2304 창고 다각형 (실버2) (0) | 2023.03.20 |
[백준] 13300 방 배정 (브론즈2) / 딕셔너리 (0) | 2023.03.18 |
[백준] 2999 비밀 이메일 (브론즈1) (0) | 2023.03.17 |
[백준] 10709 기상캐스터 (실버5) (0) | 2023.03.16 |