[BOJ/백준][Bronze IV] 10797: 10부제 (Kotlin)
https://www.acmicpc.net/problem/10797
10797번: 10부제
서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는
www.acmicpc.net
문제
서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한다.
여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 5대의 자동차 번호의 일의 자리 숫자가 주어졌을 때 위반하는 자동차의 대수를 출력하면 된다.
입력
첫 줄에는 날짜의 일의 자리 숫자가 주어지고 두 번째 줄에는 5대의 자동차 번호의 일의 자리 숫자가 주어진다. 날짜와 자동차의 일의 자리 숫자는 모두 0에서 9까지의 정수 중 하나이다.
출력
주어진 날짜와 자동차의 일의 자리 숫자를 보고 10부제를 위반하는 차량의 대수를 출력한다.
풀이
날짜와 자동차 번호의 일의 자리 숫자를 비교하여 같은 숫자이면 10부제를 위반한 차량이다.
날짜를 변수에 넣고 5개의 자동차 번호와 비교를 하였다.
만약 두 숫자가 같으면 cnt 변수를 증가시켰다.
<코드1>
import java.util.*
fun main(args: Array<String>) {
val sc: Scanner = Scanner(System.`in`)
var date = sc.nextLine()
var car_list = sc.nextLine()!!.split(" ")
var cnt = 0
for(i in 0..4){
if(car_list[i] == date ) { cnt++ }
}
println(cnt)
}
count 메서드를 사용하여 코드를 수정했더니 좀 더 간결해졌다.
+ 위에서는 문자로 비교했는데 아래 코드는 숫자로 비교하였다.
<코드2>
import java.util.*
fun main(args: Array<String>) {
val sc: Scanner = Scanner(System.`in`)
var date = sc.nextLine()!!.toInt()
var car_list = sc.nextLine()!!.split(" ").map{it.toInt()}
println("${car_list.count{it==date}}")
}
[ GitHub ] : https://github.com/wldsbs/Algorithm/blob/main/BaekJoon/BOJ10797.kt
느낀점
map 함수는 저번 문제에서도 사용하긴 했지만 사실 구글링하다보니 나와서 사용한 것이었다.
이번에는 map 함수에 대해 찾아보았다.
map 함수는 필요하다면 조건에 따라 일정한 연산을 해주고 싶을 때 사용할 수 있다.
그래서 나는 car_list의 값들을 String으로 받아왔기 때문에 숫자로 비교하려고 map함수를 사용하여
toInt()를 해주었다.
참고 : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map.html