sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • docker
  • Android Studio
  • 고득점 Kit
  • java
  • 연습문제
  • JPA
  • 티스토리챌린지
  • 고득점KIT
  • 오블완
  • nginx
  • DB
  • 레벨3
  • 레벨2
  • 백준
  • mariadb
  • 프로그래머스
  • 안드로이드 스튜디오
  • kotlin
  • spring boot
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

Programmers :: 연습문제 :: 롤케이크 자르기

2022. 10. 24. 12:18
728x90

풀이

class 롤케이크자르기 {
    fun solution(topping: IntArray): Int {

        var result = 0

        /**
         * 설명
         * - 만약 topping 의 크기가 `1` 이라면 공평하게 나눠 먹을 수 없다.
         * */
        if(topping.size == 1){
            return 0
        }

        /**
         * 설명
         * - `철수`와 `철수 동생`이 slicingPoint 를 기준으로 몇가지 종류의 topping 을 가지고 있는지 표현한다.
         * 
         * @Variable
         * - 철수 : cs
         * - 철수 동생 : csBrother
         * - slicingPoint : `철수`와 `철수 동생`이 공평하게 나눠먹을 수 있는 시점
         * */
        val csGroup = topping.slice(IntRange(0,0)).toTypedArray().groupingBy { it }.eachCount().toMutableMap()
        var csGroupKinds = csGroup.keys.size

        val csBrotherGroup = topping.slice(IntRange(1,topping.size-1)).toTypedArray().groupingBy { it }.eachCount().toMutableMap()
        var csBrotherGroupKinds = csBrotherGroup.keys.size

        var slicingPoint = 1

        /**
         * 설명
         * - csGroup 에 값이 없으면 kind 중가 및 csGroup 에 해당 topping 종류를 추가
         * - csBrotherGroup 에 값이 없어지면 kind 감소
         * 
         * while 문 탈출 조건
         * - slicingPoint 를 기준으로 철수가 먹을 수 있는 종류가 더 많아지면 더 이상 공평하게 나뉘어지는 조건이 생길 수 없음
         * - 철수 동생이 먹을 수 있는 종류가 `0`이 될때 
         * */
        while(true){
            if(csBrotherGroupKinds < csGroupKinds  || csBrotherGroupKinds == 0) break;
            if(csGroupKinds == csBrotherGroupKinds) result += 1

            val whatTopping = topping[slicingPoint]

            csBrotherGroup[whatTopping] = csBrotherGroup[whatTopping]!!.minus(1)

            if(csGroup[whatTopping] == null){
                /**
                 * csGroup 이 mutableMap 인 이유
                 * - 철수가 다음에 먹으려고 하는 토핑의 종류가 중복되는지 확인
                 * */
                csGroup[whatTopping] = 1
                csGroupKinds += 1
            }

            if(csBrotherGroup[whatTopping] == 0){
                csBrotherGroupKinds -= 1
            }

            slicingPoint += 1
        }

        return result
    }
}

출처

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이 github

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

Programmers :: 연습문제 :: 우박수열 정적분  (0) 2022.11.07
Programmers :: 고득점 kit :: DFS/BFS :: 단어변환  (2) 2022.10.30
Programmers :: 고득점 kit :: 이중우선순위큐  (0) 2022.09.21
Programmers :: 연습문제 :: 최솟값  (0) 2022.09.17
Programmers :: 2022 tech internship :: 두 큐 합 같게 만들기  (0) 2022.08.30
    'Algorithm/Programmers' 카테고리의 다른 글
    • Programmers :: 연습문제 :: 우박수열 정적분
    • Programmers :: 고득점 kit :: DFS/BFS :: 단어변환
    • Programmers :: 고득점 kit :: 이중우선순위큐
    • Programmers :: 연습문제 :: 최솟값
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바