퀸 공격

퀸 공격

쉬움

지침

체스판 위에 있는 두 퀸의 위치가 주어졌을 때, 두 퀸이 서로를 공격할 수 있는 위치에 있는지 판별해요.

체스에서 퀸은 같은 행, 열, 대각선에 있는 기물을 공격할 수 있어요.

체스판은 8x8 배열로 나타낼 수 있어요.

따라서 흰 퀸이 c5(0부터 세면 열 2, 행 3)에 있고 검은 퀸이 f2(0부터 세면 열 5, 행 6)에 있다면, 배치는 다음과 같아요:

두 퀸이 있는 체스판. 에 있는 퀸에서 뻗어 나온 화살표가 파일, 랭크, 대각선을 따라 잡을 수 있는 방향을 나타내요.

두 퀸이 서로를 공격할 수 있는지도 답할 수 있어요. 이 경우에도 두 퀸은 서로를 공격할 수 있다고 답할 수 있어요. 두 기물이 같은 대각선을 공유하기 때문이에요.

출처

체스판 이미지는 habere-et-dispertire가 LaTeX와 Ulrike Fischer의 chessboard 패키지를 사용해 만들었어요.

예외 메시지

때로는 예외를 발생시켜야 할 때가 있어요. 이럴 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그래야 코드가 더 읽기 쉬워지고 디버깅에도 큰 도움이 돼요. 오류의 원인이 특정 유형일 것이라고 아는 상황이라면 내장 오류 유형 중 하나를 발생시켜도 되지만, 이때도 의미 있는 메시지는 꼭 포함해야 해요.

이 연습 문제에서는 Queen 생성자에 음수이거나 유효한 행 또는 열이 아닌 숫자가 전달되면 raise 문을 사용해 ValueErrors를 "던져야" 해요. 테스트는 raise와 함께 exception에 메시지도 넣어야만 통과해요. can_attack() 메서드에 전달된 두 퀸이 같은 위치에 있어도 ValueError를 raise해야 해요.

메시지가 있는 ValueError를 발생시키려면, 메시지를 exception 유형의 인자로 적어요:

# if the row parameter is negative
raise ValueError("row not positive")

# if the row parameter is not on the defined board
raise ValueError("row not on board")

# if the column parameter is negative
raise ValueError("column not positive")

# if the column parameter is not on the defined board
raise ValueError("column not on board")

# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

퀸 공격 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.