문제 출처 : https://www.acmicpc.net/problem/20154
언어 : Kotlin
문제 설명 :
가톨릭대학교에 다니는 컴퓨터정보공학부 황톨릭은 코로나 때문에 슬퍼하는 친구들을 위해 게임을 하나 만들었다.
게임이 시작되면 알파벳 대문자로만 이루어진 문자열이 주어진다. 문자열이 주어지면 각 문자의 획수로 문자를 변환한다. 획수들을 갖고 앞에서부터 두 개씩 더해가는데 만약 짝이 지어지지 않는다면 그대로 다음 단계로 내려간다. 다음 단계부터는 이전 단계에서 두 개씩 더해가며 생성된 숫자들을 가지고 같은 과정을 반복한다. 과정을 반복하다가 결국 마지막 한 개의 수가 남았을 때 그 수가 홀수라면 이기는 것이고 짝수라면 지는 게임이다!!
예를 들어 "ABCDE"라는 문자열이 주어지면 ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ 각 문자의 획수인 3, 2, 1, 2, 3으로 바꾸어 아래의 그림처럼 과정을 진행한다. 단, 계산할 때, 더한 값이 10을 넘는다면 10으로 나눈 나머지로 바꿔준다.
‘E’의 경우는 짝을 지을 수 없으므로 3이 바로 내려오게 된다. 결국, 마지막 남은 수가 1인 홀수이므로 이 게임은 이기게 되는 것이다.
게임의 심판역할인 톨릭이는 매번 계산하는 게 귀찮아 코드를 짜놓고 싶어한다. 톨릭이를 도와 코드를 짜주자!!
알파벳 대문자의 획수는 아래 표와 같다.
A | B | C | D | E | F | G | H | I | J |
3 | 2 | 1 | 2 | 3 | 3 | 3 | 3 | 1 | 1 |
K | L | M | N | O | P | Q | R | S | T |
3 | 1 | 3 | 3 | 1 | 2 | 2 | 2 | 1 | 2 |
U | V | W | X | Y | Z | ||||
1 | 1 | 2 | 2 | 2 | 1 |
입력 :
첫 번째 줄에 이환이가 적어 온 답을 나타내는 문자열 S가 주어진다. S는 숫자(0123456789)로만 이루어져 있으며, 길이는 1 이상 2889 이하이다.
출력 :
첫째 줄에 정답을 출력한다.
마지막으로 남은 수가 홀수라면 "I'm a winner!"를 출력하고 0이거나 짝수라면 "You're the winner?"를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
ABCDE | I'm a winner! |
AECF | You're the winner? |
풀이 :
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))
val arr = intArrayOf(3, 2, 1, 2, 3, 3, 3, 3, 1, 1, 3, 1, 3, 3, 1, 2, 2, 2, 1, 2, 1, 1, 2 ,2 ,2, 1)
val input = readLine().map { arr[it - 'A'] }.toMutableList()
bw.write(if (game(input)[0] % 2 == 1) "I'm a winner!" else "You're the winner?")
bw.flush()
bw.close()
}
fun game(input: MutableList<Int>): MutableList<Int> {
val temp = mutableListOf<Int>()
for (i in 1 until input.size step 2) {
val cur = input[i - 1] + input[i]
temp += if (cur >= 10) cur % 10 else cur
}
if (input.size % 2 != 0) temp += input.last()
return if (temp.size == 1) temp else game(temp)
}
'백준 > 문제' 카테고리의 다른 글
25205번: 경로당펑크 2077 (0) | 2024.05.28 |
---|---|
24510번: 시간복잡도를 배운 도도 (0) | 2024.05.28 |
22351번: 수학은 체육과목 입니다 3 (0) | 2024.05.27 |
23841번: 데칼코마니 (0) | 2024.05.27 |
17502번: 클레어와 팰린드롬 (0) | 2024.05.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!