본문 바로가기

앱 개발/Algorithm

withIndex (푸드 파이트 대회)

< 문제 51번 >

 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

 

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다. 

 

준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.

 

< solution >

 

class Solution {
    fun solution(food: IntArray): String {

 

        // food 배열의 1번 인덱스부터 끝까지의 각 요소를 2로 나눈 값을 foodSlice 배열에 할당
        val foodSlice = food.slice(1 until food.size).map { it / 2 }
        val individualFood = mutableListOf<Int>()


        // foodSlice 배열의 각 인덱스와 그에 해당하는 값인 count를 순차적으로 뽑아서 인덱스에 1을 더한 값을 individualFood 리스트에 count만큼 반복하여 추가
        for ((index, count) in foodSlice.withIndex()) {
            repeat(count) {
                individualFood.add(index + 1)
            }
        }


        // 가운데에 0이 있는 대칭 문자열로 변환
        return individualFood.joinToString("") + "0" + individualFood.reversed().joinToString("")
    }
}

 

 

< withIndex 사용 예 >

 

fun main() {
    var kors = arrayOf(90, 94, 96)
    for ((idx, kor) in kors.withIndex()) {
        println("${idx}번째 국어 점수는 ${kor}입니다")  // 0번째 국어 점수는 90입니다
    }
}

 

 

(참고) https://gogumac.github.io/kotlin/kotlin-withIndex/

728x90