2037번: 문자메시지백준/문제2024. 5. 24. 02:40
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/2037
언어 : Kotlin
문제 설명 :
오른쪽 그림과 같은 핸드폰 자판이 있다. 이 자판을 이용하여 어떤 영어 메시지를 치려고 할 때, 걸리는 최소 시간을 구하는 프로그램을 작성하시오.
단, 1번은 누를 경우에는 공백이 찍힌다고 하자. 그리고 만약에 AC라는 문자를 치려 한다면 A를 치고 난 후 일정 시간을 기다린 후 C를 치면 된다.
하나의 문자를 입력하려면, 버튼을 눌러야 한다. 버튼을 누르면 버튼에 쓰여 있는 문자가 입력되며, 버튼을 누를 때 마다 다음 문자로 바뀌게 된다. 예를 들어, 2를 누르면 A, 2번 누르면 B, 3번 누르면 C이다. 공백을 연속으로 누를 때는 기다릴 필요가 없다.
입력 :
첫째 줄에 p와 w가 주어진다. (1 ≤ p, w ≤ 1,000) p는 버튼을 한번 누르는데 걸리는 시간이고, w는 AC와 같은, 같은 숫자인 문자를 연속으로 찍기 위해 기다리는 시간을 의미한다. 그리고 둘째 줄에는 적을 문자열이 주어진다. 단, 이 문자열의 길이는 1000보다 작고, 맨 앞과 맨 뒤에 공백이 들어오는 경우는 없다. 문자열은 알파벳 대문자와 띄어쓰기만으로 이루어져 있다.
출력 :
첫째 줄에 메시지를 적는데 걸리는 시간을 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
2 10 ABBAS SALAM |
72 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
var prev = ' '
var count = 0
val (p, w) = readLine().split(" ").map { it.toInt() }
readLine().forEach { cur ->
count += if (isSameNumber(prev, cur)) w + buttonCount(cur) * p else buttonCount(cur) * p
prev = cur
}
bw.write("$count")
bw.flush()
bw.close()
}
fun isSameNumber(target1: Char, target2: Char): Boolean {
return when {
target1 in 'A'..'C' && target2 in 'A'..'C' -> true
target1 in 'D'..'F' && target2 in 'D'..'F' -> true
target1 in 'G'..'I' && target2 in 'G'..'I' -> true
target1 in 'J'..'L' && target2 in 'J'..'L' -> true
target1 in 'M'..'O' && target2 in 'M'..'O' -> true
target1 in 'P'..'S' && target2 in 'P'..'S' -> true
target1 in 'T'..'V' && target2 in 'T'..'V' -> true
target1 in 'W'..'Z' && target2 in 'W'..'Z' -> true
else -> false
}
}
fun buttonCount(target: Char): Int {
return when (target) {
'A', 'D', 'G', 'J', 'M', 'P', 'T', 'W', ' ' -> 1
'B', 'E', 'H', 'K', 'N', 'Q', 'U', 'X' -> 2
'C', 'F', 'I', 'L', 'O', 'R', 'V', 'Y' -> 3
else -> 4
}
}
'백준 > 문제' 카테고리의 다른 글
17502번: 클레어와 팰린드롬 (0) | 2024.05.27 |
---|---|
1593번: 문자 해독 (0) | 2024.05.24 |
4378번: 트ㅏㅊ; (0) | 2024.05.24 |
31495번: 그게 무슨 코드니.. (0) | 2024.05.23 |
16499번: 동일한 단어 그룹화하기 (0) | 2024.05.23 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!