https://www.acmicpc.net/problem/1100
1100번: 하얀 칸
체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램
www.acmicpc.net
[문제]
체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다.
가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때,
하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.
[입력]
첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.
[출력]
첫째 줄에 문제의 정답을 출력한다.
[예제 입력 1]
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.
[예제 출력 1]
1
[예제 입력 2]
........
........
........
........
........
........
........
........
[예제 출력 2]
0
[예제 입력 3]
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
[예제 출력 3]
32
[예제 입력 4]
........
..F.....
.....F..
.....F..
........
........
.......F
.F......
[예제 출력 4]
2
나의 풀이
chess = [[False]*8 for _ in range(8)]
for i in range(8):
for j in range(8):
if (i+j)%2 == 0:
chess[i][j] = True
user_input = [list(map(str, input())) for _ in range(8)]
count = 0
for i in range(8):
for j in range(8):
if (chess[i][j]==True) and (user_input[i][j]=='F'):
count += 1
print(count)
해당 문제는 8x8의 체스판이 주어져있고 검정 칸과 하얀 칸이 번갈아가며 색칠되어 있다.
가장 왼쪽 위칸 (0,0)은 하얀색이므로, (0,1)은 검은색이라는 것을 알 수 있다.
우리가 찾고자 하는 값은 하얀 칸 위에 F라는 글자가 몇 개 있는지 확인하는 것이다.
문제 이해를 쉽게 하기 위해서 체스판을 그린 뒤 칸마다 번호를 지정해주었다.
여기서 한 가지 특징을 발견할 수 있는데, (i, j)라는 칸이 있을 때 i+j가 홀수이면 검은색이 된다는 것을 알 수 있다.
그래서 초기 2차원 배열을 생성해 줄 때 모두 False로 초기화를 해주고, i+j가 짝수라면 True로 변환해주도록 한다.
chess = [[False]*8 for _ in range(8)] #2차원 배열 생성(False로 초기화)
for i in range(8):
for j in range(8):
if (i+j)%2 == 0: #만약 i+j가 짝수라면
chess[i][j] = True #True로 변환해준다.
이렇게 초기 체스판 설정이 끝난 뒤 사용자의 입력값을 마찬가지로 2차원 배열로 받아준다.
user_input = [list(map(str, input())) for _ in range(8)]
이제 하얀색 칸 위에 몇 개의 말이 놓여 있는지를 확인하기 위한 count 변수를 선언해주고,
반복문을 실행해준다.
count = 0 #하얀색 칸 위에 말이 놓여진 경우를 셀 변수
for i in range(8):
for j in range(8):
if (chess[i][j]==True) and (user_input[i][j]=='F'): #하얀색 칸에 F가 놓여진 경우
count += 1 #count를 1 증가시킨다.
TIP)
ㅇ 1차원 배열 입력받기
lst = list(map(int, input().split()))
ㅇ 한 줄에 정수형 변수 여러 개 입력받기
num1, num2, num3 = map(int, input().split())
ㅇ 한 줄에 문자열 변수 여러개 입력받기
a,b = input().split()
ㅇ 문자열 여러 줄 입력받기
str_list = [input() for _ in range(n)]
[입력]
ABBAAAB
BBBABBB
BABABAA
BABABBB
ABBABAA
[출력]
print(str_list)
['ABBAAAB', 'BBBABBB', 'BABABAA', 'BABABBB', 'ABBABAA']
ㅇ 문자열 여러 줄 입력받기(한 줄에 띄어쓰기 없이)
lst = [list(map(int, input())) for _ in range(n)]
[입력]
101111
101010
101011
111011
[출력]
[[1,0,1,1,1,1], [1,0,1,0,1,0], [1,0,1,0,1,1], [1,1,1,0,1,1]]
ㅇ 2차원 배열 입력받기
lst = [list(map(int, input().split())) for _ in range(n)]
[입력]
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
[출력]
print(lst)
[[1,2,3,4,5], [2,3,4,5,6], [3,4,5,6,7], [4,5,6,7,8], [5,6,7,8,9]]
'문제풀이' 카테고리의 다른 글
[백준] 1267번 파이썬 풀이 (0) | 2022.03.23 |
---|---|
[백준] 10870번 파이썬 풀이 (0) | 2022.03.21 |
[백준] 1009번 파이썬 풀이 (0) | 2022.03.20 |
[백준] 1076번 파이썬 풀이 (0) | 2022.03.16 |
[백준] 1546번 파이썬 풀이 (0) | 2022.03.15 |