티스토리 뷰

코트카타

 

명예의 전당 (1)

 

문제

 

 

정답

class Solution {
    fun solution(k: Int, score: IntArray): IntArray {
        var res = IntArray(score.size)
        var kList = mutableListOf<Int>()
        for (i in score.indices) {
            kList.add(score[i])
            kList.sortDescending()
            if (kList.size > k) kList.removeAt(k)
            res[i] = kList.last()
        }
        return res
    }
}

모든 점수를 포함하여 상위 k개의 점수를 유지하고,

매일마다 명예의 전당의 최하위 점수를 정확히 반환한다.

 

var res = IntArray(score.size)
var kList = mutableListOf<Int>()

최하위 점수들을 담을 res배열은 score와 같은 크기로 초기화하고,

k개의 점수들을 담을 배열은 가변리스트로 초기화 하여 크기를 동적으로 조절할 수 있게 한다.

 

for (i in score.indices) {
	kList.add(score[i])
	kList.sortDescending()
	if (kList.size > k) kList.removeAt(k)
	res[i] = kList.last()
}

모든 점수를 kList에 담고 내림차순 정렬한 다음 kList를 k만큼 자른다.

자른 kList의 마지막 요소는 k개의 점수 중에 최하위 점수에 해당한다.

 


 

MBTI 테스트 결과화면

 

결과화면 레이아웃

 

MBTI와 사진은 가변값에 해당한다.

 

 

결과화면 이동

fun moveToNextQuestion(){
    if(viewPager.currentItem==3){
        val intent = Intent(this, ResultActivity::class.java)
        intent.putIntegerArrayListExtra("results", ArrayList(questionnaireResults.results))
        startActivity(intent)
    }else{
        // 다음 화면 이동
    }
}

TestActivity의 화면 이동 함수에서 결과화면으로 이동하는 코드를 작성해준다.

IntArray형 값에 해당하는 results(선택 결과)를 인텐트를 통해 결과화면에 넘겨준다.

 

 

값 받아주기

val results = intent.getIntegerArrayListExtra("results") ?: arrayListOf()

"results"의 키값을 받아오는데 키값을 받아오지 못하는 경우에는 빈배열을 반환한다. 

 

 

 

결과 텍스트 초기화

val resultTypes = listOf(
    listOf("E", "I"),
    listOf("N", "S"),
    listOf("T", "F"),
    listOf("J", "P")
)

var resultString = ""
for (i in results.indices) {
    resultString += resultTypes[i][results[i] - 1]
}

val tvResValue: TextView = findViewById(R.id.tv_resValue)
tvResValue.text = resultString

results는 1 또는 2의 값을 가진 크기 4의 int형 배열이란 것을 이용해서

결과 텍스트를 해당하는 MBTI로 초기화한다.

 

 

결과 이미지 초기화

val ivResImg: ImageView = findViewById(R.id.iv_resImg)
val imageResource = resources.getIdentifier("ic_${resultString.lowercase()}", "drawable", packageName)
ivResImg.setImageResource(imageResource)

모든 mbti이미지는 "ic_${mbti}"와 같은 파일명을 가지고 있다.

이를 이용해서 결과 이미지를 해당하는 mbti의 이미지로 초기화 해준다.

 

 

다시하기 버튼 동작 설정

val btnRetry: Button = findViewById(R.id.btn_res_retry)
btnRetry.setOnClickListener {
    val intent = Intent(this, MainActivity::class.java)
    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    startActivity(intent)
}

다시하기 버튼을 누르면 맨 처음 화면으로 돌아가게 된다.

intent의 flags가  새로운 작업(task)을 시작하고 기존의 작업을 모두 제거하도록 설정한다.

화면전환이 일어날 때 기존의 모든 액티비티가 종료되고 새로운 작업이 시작된다.

 

 

테스트

 

드디어 끝났다...

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함