본문 바로가기

알고리즘

프로그래머스 - 푸드 파이트(Kotlin)

본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.

https://github.com/ROUTINE-STUDY/Algorithm

 

저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.

 

GitHub - ROUTINE-STUDY/Algorithm: 초보 알고리즘 스터디 / 누구나 참여 가능

초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.

github.com

문의는 댓글 바람.

 

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/134240?language=kotlin#

 

[문제 설명]

문자열과 문자열 거꾸로

 

[접근 방법]

음식을 양쪽에서 먹어야 하므로 각 사람이 먹는 i번째 음식 개수는 food[i] / 2가 된다.(단, i가 0일 때는 물이므로 제외한다.)

입출력 예시로 준 1번 같은 경우에는 [1, 3, 4, 6]이다.

물을 제외하고 각 사람이 먹을 개수는 1 = 1, 2 = 2, 3 = 3개가 된다.

즉, 물의 개수 + 음식의 총 개수 = 1 + (1 + 2 + 3) *2 = 13개가 된다.

총 문자열의 길이는 13이므로 0~5, 12~7는 음식 순서대로 주고 가운데(13 / 2 = 6)는 0으로 물을 준다.

 

[Kotlin 코드]

class Solution {
    fun solution(food: IntArray): String {
        var answer = StringBuilder()
        var length = 0
        for (i in 1 until food.size) {
            length += food[i] / 2
            food[i] /= 2
        }
        length *= 2
        length += 1

        val charArray = Array(length) { ' ' }
        charArray[length / 2] = '0'
        var pointer = 1
        for (i in 0 until length / 2) {
            if (food[pointer] == 0) {
                while (food[pointer] == 0) {
                    pointer++
                }
            }

            charArray[i] = pointer.digitToChar()
            charArray[charArray.size - i - 1] = pointer.digitToChar()
            food[pointer]--
        }
        charArray.forEach { answer.append(it) }

        return answer.toString()
    }
}

 

728x90
반응형