1100번: 하얀 칸백준/문제2023. 9. 5. 15:43
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1100
언어 : Kotlin
문제 설명 :
체스판은 8×8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.
- 첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.
- 첫째 줄에 문제의 정답을 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
.F.F...F F...F.F. ...F.F.F F.F...F. .F...F.. F...F.F. .F.F.F.F ..FF..F. |
1 |
........ ..F..... .....F.. .....F.. ........ ........ .......F .F...... |
2 |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val map = Array(8) { i -> IntArray(8) { j -> i + j + 1 } }
val new = Array(8) { Array(8) { "0" } }
repeat(8) { i ->
val temp = readLine().chunked(1)
repeat(8) { j -> new[i][j] = temp[j] }
}
var cnt = 0
repeat(8) { i ->
repeat(8) { if (map[i][it] % 2 != 0 && new[i][it] == "F") cnt++ }
}
bw.write("$cnt")
bw.flush()
bw.close()
}
단순히 비교를 위한 배열 map을 만들고 안을 i + j + 1 형태로 채웠다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
위와 같은 형태가 나오게 되는데, 가장 왼쪽 위칸 (0,0)이 하얀색이고, 하얀색 칸 위 말을 구하라 했으므로 하얀색 칸만 구분하면 된다. 하얀색 칸은 굵은 글씨의 칸으로 전부 홀수임을 알 수 있다.
짝수 홀수로 나뉘게 된다면 구분법은 it % 2 == 0 과 같은 나머지 연산을 통해 쉽게 알아낼 수 있다.
입력을 받은 배열 new를 만들어 채워넣고, 하얀칸 위에 존재하는 말의 갯수를 셀 변수 cnt를 만든다.
중첩 반복문을 또 다시 사용해 if문을 사용하면 끝난다.
'백준 > 문제' 카테고리의 다른 글
1977번: 완전제곱수 (1) | 2023.09.07 |
---|---|
1292번: 쉽게 푸는 문제 (0) | 2023.09.06 |
1550번: 16진수 (1) | 2023.09.04 |
2576번: 홀수 (0) | 2023.09.01 |
17478번: 재귀함수가 뭔가요? (0) | 2023.09.01 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!