TIL/kotlin 알고리즘

kotlin 프로그래머스 lv2 기능개발

crablo 2024. 3. 13. 16:25
728x90

1. 의도 및 이유: 배포시 개발속도별로 모두 다르고, 뒤의 기능이 앞의 기능보다 먼저 개발될 수 있어서, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포되므로 새로운 배포배열 왼쪽요소의 값이 오른쪽 요소 값보다 크다면 오른쪽 요소의 값을 왼쪽요소의 값으로 바꿨다.


2. 코드 동작 로직:
-먼저 작업진도 배열의 값들은 현재 진도 상태를 나타내고 우리가 구하기위한값은 나머지완성 배포일이 얼만큼 걸리는지 구해야하기 때문에 전체 100-progresses요소  를 뺀 새로운 배열을 만들어주었다. ex)newProgresses = [7, 70, 45]       
-그 후 배포일 배열을 새로 초기화하고 newProgresses의 요소를 작업속도 요소로 나눈값이 나누어떨어지지 않는다면 몫에 1을 더했다.
-마지막으로, distriDate배열의 왼쪽요소와 오른쪽 요소를 비교해서 왼쪽은 먼저 배포되어야하는 일에 해당하는 요소여서
왼쪽을 기준으로 오른쪽의 배포일을 맞췄다.
그 후 업데이트된 distriDate를 groupingBy함수를 사용해서 각각의 요소를 키값으로 만들고 갯수를 value로 만들어서 새로운 ㅡ맵변수 resultMap에 담아두었다. 


3. 버그 또는 에러 및 해결: 왼쪽요소와 오른쪽 요소를 비교 후 새로운 맵을 만들때 값이 원하는값이 안나와서
디버깅을 했고, 인덱스 범위를 잘못 설정해서 다시 수정후 잘 해결되었다.

해당 문제는 아래와 같이 코드를 작성하였다.

해당 문제를 풀때 groupBy와 groupingBy가 헷갈려서 다시 문법을 검색해서 풀게되었고, 예상되로 잘 풀렸다.

다시 문법을 되짚어보면 groupBy는 예를들어  

val names = listOf("철수","영희","맹구","짱구", "훈")

val chingu = names.groupBy{it.length}

println( chingu ) // {2=[철수, 영희, 맹구, 짱구] ,1= [훈]}

 

이렇게  groupBy안에있는 값이 키값이 되고 해당 키에 포함되는 값이 키값의 value가 된다.

 

나는 groupingBy로 문제를 해결하였고,

groupingBy는 배열의 요소별로 키값을 만들고 그 키가 몇개인지가 value가 된다.

 

728x90