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값을 출력한다.
'백준 > 브론즈2' 카테고리의 다른 글
| [Python] 백준 1152번 - 단어의 개수 (0) | 2025.04.26 |
|---|---|
| [Python] 백준 1673번 - 치킨 쿠폰 (0) | 2025.04.25 |
| [Python] 백준 1076번 - 저항 (0) | 2025.04.24 |
| [Python] 백준 1075번 - 나누기 (0) | 2025.04.24 |
| [Python] 백준 1009번 - 분산처리 (0) | 2025.04.24 |