ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스][Kotlin] 롤케이크 자르기
    프로그래머스 2023. 2. 20. 12:57
    728x90

    코드 기재에 앞서 간단한 아이디어에 대한 설명을 하겠습니다.

    자세한 내용은 https://school.programmers.co.kr/learn/courses/30/lessons/132265 에서 확인하시면 좋으실거 같습니다.

     

    topping

    1 2 1 3 1

    형이 1조각 먹을때

     

    형이 먹을거

    1        

    동생이 먹을거

      2 1 3 1

    형의 토핑 종류 = 1

    동생의 토핑 종류 = 3

     

    topping

    1 2 1 3 1

    형이 2조각 먹을때

     

    형이 먹을거

    1 2      

    동생이 먹을거

        1 3 1

    형의 토핑 종류 = 2

    동생의 토핑 종류 = 2

     

    상기 2개를 봤을 때 이런 생각을 가질 수 있습니다.

    형의 토핑 종류는 형이 i 개를 먹는다고 했을때 topping[0]~topping[i-1]까지 중복된 것을 제외한 갯수 이며,

    동생또한 형이 i 개를 먹는다고 했을때 topping[i]~topping[topping.size-1] 까지 중복된 것을 제외한 갯수 입니다.

    그렇다면 형이 i  개를 먹을때 중복된것을 제외한 갯수와 그때 동생이 먹는 것에 중복된 것을 제외 한 갯수를 배열로 만들어

    저장 해놓는 다면 추후 형의 형이 i개를 먹었을때 형과 동생의 각각 먹은 topping  의 갯수를 알 수 있다는 결론이 나옵니다.

     

    해당 아이디어를 Kotlin으로 작성해보면 아래와 같은 코드로 작성 할 수 있습니다.

    class Solution {
        fun solution(topping: IntArray): Int {
            var answer: Int = 0
            var arr1 = IntArray(topping.size){0} //형의 종류의 수를 저장할 배열
            var arr2 = IntArray(topping.size){0} //동생의 종류의 수를 저장할 배열
            var menuCount = mutableSetOf<Int>()
    
            for(i in 0 ..topping.size-1){ // 형이 (i+1)개를 먹었을때의 종류의 수
                menuCount.add(topping[i])
                arr1[i] = menuCount.size
            }
    
            menuCount.clear()
    
            for(i in topping.size-1 downTo 0){ // 형이 (i+1)개를 먹었을때의 동생의 종류의 수
                menuCount.add(topping[i])
                arr2[i] = menuCount.size
            }
            
            for(i in 0 until topping.size-1){ // 형이 (i+1)개를 먹었을 때 형과 동생의 종류의 수 비교
                if(arr1[i] == arr2[i+1]) answer++
            }
            
            return answer
        }
    }

     

    하기는 상기 코드의 실행 결과 입니다.

    테스트 1 통과 (4.20ms, 64.7MB)
    테스트 2 통과 (20.14ms, 72.7MB)
    테스트 3 통과 (13.76ms, 65.9MB)
    테스트 4 통과 (13.92ms, 66.7MB)
    테스트 5 통과 (57.81ms, 116MB)
    테스트 6 통과 (86.86ms, 128MB)
    테스트 7 통과 (101.08ms, 128MB)
    테스트 8 통과 (88.44ms, 128MB)
    테스트 9 통과 (106.69ms, 129MB)
    테스트 10 통과 (83.47ms, 128MB)
    테스트 11 통과 (13.60ms, 63.1MB)
    테스트 12 통과 (6.00ms, 65.8MB)
    테스트 13 통과 (109.87ms, 128MB)
    테스트 14 통과 (84.28ms, 128MB)
    테스트 15 통과 (92.30ms, 128MB)
    테스트 16 통과 (101.65ms, 125MB)
    테스트 17 통과 (89.63ms, 126MB)
    테스트 18 통과 (93.59ms, 128MB)
    테스트 19 통과 (105.26ms, 124MB)
    테스트 20 통과 (82.37ms, 125MB)

     

Designed by Tistory.