단어 공부

HJ Kwon·2021년 12월 17일
0
  • Kotlin을 이용해 처음 푼 알고리즘 문제이다.
  • 사내 시험은 PriorityQueue, HashMap, List 등을 많이 이용하는데, 이 문제 역시 이를 적용하였다.
  • 알파벳을 counting하면서 계속 PriorityQueue에 넣어주었고, 나중에 이를 poll()하면서 lazy update 하였다.
import java.util.*

fun main() {
    var mInputStr : String = readLine().toString()
    var mySolution = Solution(mInputStr)
    mySolution.solve()

}

class Data(val mChar : Char, val mCnt : Int) : Comparable<Data> {
    override fun compareTo(other: Data): Int {
        return if (this.mCnt > other.mCnt) -1
        else 1
    }
}

class Solution(var mInputString : String) {
    var mPriorityQueue = PriorityQueue<Data>()
    var mAlphabetCntArr = Array(26){0}

    fun solve() {
        mInputString = mInputString.uppercase()
        for (i in mInputString.indices step(1)) {
            mAlphabetCntArr[mInputString[i] - 'A']++;
            var mNewData = Data(mInputString[i], mAlphabetCntArr[mInputString[i] - 'A'])
            mPriorityQueue.add(mNewData)
        }

        var mAns : Char = '?'
        var mAnsCnt : Int = 0
        while (!mPriorityQueue.isEmpty()) {
            var mCandidate = mPriorityQueue.poll()
            if (mAlphabetCntArr[mCandidate.mChar - 'A'] != mCandidate.mCnt) {
                // valid check
                continue
            }
            if (mAnsCnt != 0) {
                if (mAnsCnt == mCandidate.mCnt) {
                    mAns = '?'
                    break
                } else {
                    break
                }
            }
            mAns = mCandidate.mChar
            mAnsCnt = mCandidate.mCnt
        }
        println(mAns)
    }
}

0개의 댓글