#15612
8 x 8 크기의 체스판 위의 몇 개의 칸에 룩(rook)이 놓여 있다. 각 칸에는 최대 1개의 룩을 놓을 수 있으므로, 체스판 위에는 0개 이상 64개 이하의 룩이 놓여 있는 것이다.
이때, 현재 체스판의 배치가 다음 조건을 모두 만족하는지를 판별하는 프로그램을 작성하라.
- 정확히 8개의 룩이 있어야 한다.
- 모든 룩은 서로 공격할 수 없어야 한다. 즉, 서로 다른 두 룩은 같은 열에 있거나 같은 행에 있으면 안 된다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 여덟 개의 줄로 이루어지며, 각 줄에는 길이가 8인 ‘O’ 또는 ‘.’로 구성된 문자열이 주어진다. i번째 줄의 j번째 글자는, 체스판의 i행 j열에 룩이 하나 놓여 있다면 ‘O’, 아무것도 놓여 있지 않다면 ‘.’이다.
[출력]
각 테스트 케이스마다, 주어진 체스판의 배치가 주어진 모든 조건을 만족한다면 ‘yes’를, 하나라도 만족하지 않는다면 ‘no’를 출력한다.
T=int(input())
for t in range(1, T+1):
chList = []
passcnt = 0
for i in range(0,8):
chList.append(list(str(input())))
for b in range(0,8):
hcnt = 0
wcnt = 0
for a in range(0,8):
if chList[a][b] == "." :
hcnt +=1
if chList[b][a] == "." :
wcnt +=1
if hcnt <7 or wcnt <7 or (wcnt or hcnt)==8 :
print("#{0} no".format(t))
break
elif hcnt == 7 and wcnt ==7 :
passcnt +=1
if passcnt == 8 :
print("#{0} yes".format(t))
다른 구현 문제는 풀만한데 이상하게 체스판 , 좌표 같은 문제는 풀기가 어렵다 ..
이것도 다른 분들 풀이를 보니까 보통 2차원 배열을 만들고 하나씩 방문해서 푸는 경우가 많은데 나는 조건을 다르게 해석했다.
아마 이 문제 말고 비슷한 체스 문제에 조건이 많아지면 이 방법은 사용하기 어려울 거 같다 ..
다른 방법으로도 풀어봐야지 ..
좋은 방법이나 정석이라 할 수 있는 방법이 있으면 댓글로 알려주세요 !