반응형

백준 1296번 문제입니다. (solved.ac) 기준 브론즈 1 문제입니다.

https://www.acmicpc.net/problem/1296

 

1296번: 팀 이름 정하기

연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다. 이환

www.acmicpc.net

문제

문제 접근

  • L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
  • O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
  • V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
  • E = 연두의 이름과 팀 이름에서 등장하는 E의 개수

((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100 

위의 정보들은 연두의 이름과 팀의 이름을 받아서 우승할 확률을 구하는 공식입니다!

 

첫 번째 줄에는 연두의 이름을, 두 번째 줄에는 팀 이름 후보의 개수 n이 그 후 n개의 줄에는 팀 후보의 이름이 한 줄에 하나씩 주어집니다. 위의 공식을 이용하여 팀 후보의 이름들 중 우승할 확률이 가장 높은 팀 이름을 출력하면 됩니다. 

단, 확률이 같은 팀이 여러가지인 경우 사전 순으로 가장 앞에있는 팀의 우승할 확률이 가장 높다고 합니다.

이 부분을 처리하기 위해서 확률이 동일한 경우 두 문자열을 비교해서 사전순으로 앞에 있는 팀 이름을 출력해줘야 하므로 두 문자열을 list로 만들고 sorted()를 사용하여 정렬 후 0번째 인덱스([0])에 있는 문자열을 출력할 수 있도록 하였습니다.

정답 코드

fun main() {

    var lCnt = 0
    var oCnt = 0
    var vCnt = 0
    var eCnt = 0
    var maxProbability = 0
    var maxProbabilityTeam = ""

    var chartreuseName = readln()
    chartreuseName.forEach {
        when (it) {
            'L' -> lCnt++
            'O' -> oCnt++
            'V' -> vCnt++
            'E' -> eCnt++
        }
    }

    val teamCnt = readln().toInt()

    repeat(teamCnt) {

        var curLCnt = 0
        var curOCnt = 0
        var curVCnt = 0
        var curECnt = 0

        val teamName = readln()
        teamName.forEach {
            when (it) {
                'L' -> curLCnt++
                'O' -> curOCnt++
                'V' -> curVCnt++
                'E' -> curECnt++
            }
        }
        val curProbalility =
            calProbability((lCnt + curLCnt), (oCnt + curOCnt), (vCnt + curVCnt), (eCnt + curECnt))

        if (maxProbability < curProbalility) {
            maxProbability = curProbalility
            maxProbabilityTeam = teamName
        }

        if (maxProbability == curProbalility) {

            if (maxProbabilityTeam == "") maxProbabilityTeam = teamName

            maxProbabilityTeam = listOf(maxProbabilityTeam, teamName).sorted()[0]
        }

    }

    println(maxProbabilityTeam)
}

fun calProbability(lCnt: Int, oCnt: Int, vCnt: Int, eCnt: Int) =
    ((lCnt + oCnt) * (lCnt + vCnt) * (lCnt + eCnt) * (oCnt + vCnt) * (oCnt + eCnt) * (vCnt + eCnt)) % 100

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기