1296번: 팀 이름 정하기백준/문제2024. 2. 28. 12:57
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1296
언어 : Kotlin
문제 설명 :
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 4가지 변수의 값을 계산해야 한다.
- L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
- O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
- V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
- E = 연두의 이름과 팀 이름에서 등장하는 E의 개수
그 다음, 위에서 구한 변수를 다음 식에 입력하면 팀 이름의 우승할 확률을 구할 수 있다.
((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100
연두의 영어 이름과 팀 이름 후보 N개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자. 확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
입력 :
첫째 줄에 연두의 영어 이름이 주어진다. 둘째 줄에는 팀 이름 후보의 개수 N이 주어진다. 셋째 줄부터 N개의 줄에 팀 이름이 한 줄에 하나씩 주어진다.
연두의 영어 이름과 팀 이름은 길이는 1보다 크거나 같고, 20보다 작거나 같으며, 알파벳 대문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이다.
출력 :
첫째 줄에 우승할 확률이 가장 높은 팀 이름을 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
LOVE 3 JACOB FRANK DANO |
FRANK |
JANE 4 THOMAS MICHAEL INDY LIU |
INDY |
LILLY 1 PIERRE |
PIERRE |
MERYLOV 5 JOHN DAVE STEVE JOHN DAVE |
DAVE |
LLOL 4 BVERON CVERON AVERON DVERON |
AVERON |
VELYLEOCEVE 5 YVXHOVE LCOKO OGWSJVEVEDLE WGFVSJEL VLOLUVCBLLQVESWHEEKC |
VLOLUVCBLLQVESWHEEKC |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
data class Team(val team: String, val percentage: Int)
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val arr = IntArray(4) { 0 }.also { sorter(readLine(), it) }
val n = readLine().toInt()
val team = mutableListOf<Team>()
repeat(n) {
val name = readLine()
val temp = arr.copyOf().also { sorter(name, it) }
val sum = (temp[0] + temp[1]) * (temp[0] + temp[2]) * (temp[0] + temp[3]) * (temp[1] + temp[2]) * (temp[1] + temp[3]) * (temp[2] + temp[3])
team += Team(name, sum.mod(100))
}
team.sortWith(compareByDescending<Team> { it.percentage }.thenBy { it.team })
bw.write(team[0].team)
bw.flush()
bw.close()
}
fun sorter(input: String, arr: IntArray): IntArray {
input.forEach {
when (it) {
'L' -> arr[0]++
'O' -> arr[1]++
'V' -> arr[2]++
'E' -> arr[3]++
}
}
return arr
}
'백준 > 문제' 카테고리의 다른 글
5670번: 휴대폰 자판 (1) | 2024.02.28 |
---|---|
25640번: MBTI (1) | 2024.02.28 |
2998번: 8진수 (0) | 2024.02.27 |
2954번: 창영이의 일기장 (1) | 2024.02.27 |
17863번: FYI (1) | 2024.02.27 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!