- 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)
}
}