본문 바로가기

알고리즘

프로그래머스 - 덧칠하기(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/161989

 

[문제 설명]

언뜻 보면 까다롭지만 단순히 생각하면 안 칠해진 곳을 시작점으로 칠하면 최소한 칠한 방법이 된다.

[접근 방법]

import java.util.LinkedList

fun main() {
    val solutionObject = Solution()
    // test code
    println(solutionObject.solution(8, 4, intArrayOf(2, 3, 6)).equals(2))
    println(solutionObject.solution(5, 4, intArrayOf(1, 3)).equals(1))
    println(solutionObject.solution(4, 1, intArrayOf(1, 2, 3, 4)).equals(4))
    println(solutionObject.solution(1, 1, intArrayOf(1)).equals(1))
    println(solutionObject.solution(7, 4, intArrayOf(1, 4, 7)).equals(2))
}

class Solution {
    fun solution(n: Int, m: Int, section: IntArray): Int {
        //한 구역에 페인트를 여러 번 칠해도 되고 다시 칠해야 할 구역이 아닌 곳에 페인트를 칠해도 되지만 다시 칠하기로 정한 구역은 적어도 한 번 페인트칠을 해야 합니다.
        val queue = LinkedList<Int>()
        var answer = 0
        section.toCollection(queue)
        var currentPoint = Int.MIN_VALUE

        while (queue.isNotEmpty()) {
            val node = queue.poll()
            if (currentPoint + m - 1 < node) {
                answer++
                currentPoint = node
            }
        }

        return answer
    }
}
728x90
반응형