모의고사

HJ Kwon·2021년 12월 21일
0
  • map을 사용하였다. 처음에는 data class를 만들어 comparable을 상속하려 했으나, max 값을 가진 것만 찾으면 되서 linear한 순회로 방법을 돌렸다.
  • kotlin에서 list를 사용할때 빈 list에 plus가 제대로 되지 않는 고충이 있었는데, mutableListOf를 사용해야 함을 알았다.
  • 타인의 풀이에서 map에서 max 값이 아닌것을 remove하고 결과 map을 list로 만들고 sort하고 다시 map으로 만들어 array로 만드는 함수형 코드를 보았는데, 만약 문제 수가 10만을 넘어가면 그렇게 효율적이진 않아보인다..... 아직 내가 부족한 것일 수도 있고..
    fun solution(answers: IntArray): IntArray {
        var mStudent1 = intArrayOf(1, 2, 3, 4, 5)
        val mStudent1IdxParser = mStudent1.size
        var mStudent2 = intArrayOf(2, 1, 2, 3, 2, 4, 2, 5)
        val mStudent2IdxParser = mStudent2.size
        var mStudent3 = intArrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)
        val mStudent3IdxParser = mStudent3.size

        var mSolvedCntPerStudent = mutableMapOf<Int, Int>()
        mSolvedCntPerStudent[1] = 0
        mSolvedCntPerStudent[2] = 0
        mSolvedCntPerStudent[3] = 0
        var mMax = 0
        for (i in answers.indices) {
            if (answers[i] == mStudent1[i % mStudent1IdxParser]) {
                var mCurrent = mSolvedCntPerStudent[1]
                if (mCurrent != null) {
                    mSolvedCntPerStudent[1] = mCurrent + 1
                    if (mMax < mCurrent + 1) mMax = mCurrent + 1
                }
            }
            if (answers[i] == mStudent2[i % mStudent2IdxParser]) {
                var mCurrent = mSolvedCntPerStudent[2]
                if (mCurrent != null) {
                    mSolvedCntPerStudent[2] = mCurrent + 1
                    if (mMax < mCurrent + 1) mMax = mCurrent + 1
                }
            }
            if (answers[i] == mStudent3[i % mStudent3IdxParser]) {
                var mCurrent = mSolvedCntPerStudent[3]
                if (mCurrent != null) {
                    mSolvedCntPerStudent[3] = mCurrent + 1
                    if (mMax < mCurrent + 1) mMax = mCurrent + 1
                }
            }
        }
        
       var mTempList = mutableListOf<Int>()
       for (it in mSolvedCntPerStudent.entries) {
           if (mSolvedCntPerStudent[it.key] == mMax) {
               mTempList.add(it.key)
           }
       }
       return mTempList.toIntArray()
    }

0개의 댓글