Baekjoon/IM Level

[백준] 1063 킹 (실버3)

2023. 3. 20. 12:32

문제요약

나의 코드 및 설명

  • 킹, 돌 위치를 리스트에 저장하고, 아스키 코드를 통해 숫자로 변환한다.
  • 딕셔너리를 통해 킹과 돌을 어떻게 이동할 수 있는지에 대한 정보를 표현한다.
  • 이동 후의 킹이 범위를 벗어나면 다음 이동을 수행하고, 벗어나지 않는다면 이동을 수행한다. 이 때, 킹이 가려는 방향에 돌이 놓여져 있다면 돌을 킹이 이동하려는 방향으로 이동시키고, 킹을 이동한다. 그렇지 않다면 킹만 이동한다.
  • 이동이 끝난 킹과 돌을 다시 아스키코드를 통해 변환하여 결과를 출력한다.
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
'Baekjoon/IM Level' 카테고리의 다른 글
  • [백준] 2292 벌집 (브론즈2)
  • [백준] 2304 창고 다각형 (실버2)
  • [백준] 13300 방 배정 (브론즈2) / 딕셔너리
  • [백준] 2999 비밀 이메일 (브론즈1)
hellosonic
hellosonic
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • SWEA D2
  • JS
  • 구현
  • 백준 18870
  • 파이썬 11478
  • 파이썬 1269
  • 자바스크립트
  • 이코테
  • 리액트 todolist
  • 파이썬 2529
  • SWEA
  • 파이썬 1946
  • 파이썬 1436
  • 프로그래머스
  • SWEA/D3
  • javascript ux
  • 백준 1157
  • 백준
  • 프로그래머스 데브코스
  • 백준 14891
  • 국비지원교육
  • 자바스크립트 기본기
  • 코딩부트캠프
  • 백준 2999
  • 파이썬
  • 그리디
  • SWEA 파이썬
  • SWEA D3
  • 프론트엔드 데브코스
  • 백준 5212

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[백준] 1063 킹 (실버3)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.