백준/브론즈2

[Python] 백준 1100번 - 하얀 칸

두부마라탕 2025. 4. 25. 19:41

https://www.acmicpc.net/problem/1100


문제

체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.

 

코드

white = 0

for i in range(8):
    chess = list(input())
    for j in range(1,9):
        if i % 2 == 1 and j % 2 == 0:
            if chess[j-1] == 'F':
                white += 1
        if i % 2 == 0 and j % 2 == 1:
            if chess[j-1] == 'F':
                white += 1


print(white)

 

풀이

1. 일단 8x8이니까 이중반복문을 사용한다.

2. 이제 각 줄마다 받고

  2-1. 이번에 받는 내용은 split할만한 요소가 없기에 list()를 사용해서 받은 문자열을 문자로 리스트에 저장해준다.

3. 홀수인 줄에서 짝수일 때 +1, 짝수인 줄에서 홀수일 때 +1을 해준다.

4. 이제 나온 결과물을 출력해준다.

 

근데 다 만들고 생각해보니까 문자열은 애초에 인덱스 사용 가능해서 리스트로 만들 필요가 없다는 것을 깨달았다... 그리고 내가 가로를 1부터 8로 세서 코드가 더 복잡해졌다. 0부터 7로 생각했어야 하는데....

그런 의미에서 간소화를 시켜봤다.

 

간소화 코드

white = 0

for i in range(8):
    chess = input()
    for j in range(8):
        if (i + j) % 2 == 0 and chess[j] == 'F':
            white += 1

print(white)

 

풀이

1. 이중반복문을 사용하는 것은 같다.

2. 문자열을 받아서 x, y 좌표의 합이 짝수이며 그 자리가 F일 때 1을 더하도록 했다.

  2-1. x, y의 합이 짝수여야 하는 이유는 짝수줄에 서 짝수일 때, 홀수 줄에서 홀수일 때 조건을 만족하기 때문이다.

  2-2. ex) (0,0), (1,1) 처음의 코드와 진술이 다른 이유는  1부터 8로 생각하고 코드를 짜버렸기 때문이다...

3. 그렇게 나온 white값을 출력한다.