Algorithm/백준

[BOJ] 1100 - 하얀 칸

비번변경 2022. 4. 3. 00:48

문제

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

8 * 8 크기의 검정 칸과 하얀 칸이 번갈아가며 칠해진 체스판이 있다. 가장 왼쪽 위칸 (0, 0)이 하얀 칸이라고 할 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하라.

말이 없는 칸은 "."로 표기하고, 말이 있는 칸은 "F"로 표기한다.

.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.

 

풀이

내 풀이

1. 체스판의 상태를 문자열 배열로 입력받는다.

2. 체스판을 탐색하며, 하얀 칸이면서(행과 열이 짝수이거나 행과 열이 홀수) 말이 있을 때 말의 개수를 1씩 증가시킨다.

3. 최종 확인된 말의 개수를 출력한다.

 

코드

import sys

pan = [list(sys.stdin.readline()[:-1]) for _ in range(8)]
c = 0
for i in range(8):
    for j in range(8):
        if pan[i][j] == 'F' and ((i % 2 == 0 and j % 2 == 0) or (i % 2 == 1 and j % 2 == 1)):
            c += 1
print(c)

 

 

다른 사람 풀이

하얀 칸과 검은 칸이 번갈아 색칠되었다는 점을 이용하면 코드 길이를 줄일 수 있다.

1. 체스판의 상태를 입력받는다. 문자열로 누적하여 저장하며, 한 행의 길이를 홀수인 9로 맞춘다.

2. 체스판의 하얀 칸에 말이 몇 개인지 센다. 체스판 문자열의 인덱스를 2씩 증가시킨 결과이 하얀 칸에 해당한다.

 

코드

import sys

r = ''
for _ in range(8):
    r += sys.stdin.readline()
print(r[::2].count('F'))