본문 바로가기
[ 다먹살 ]/- Coding

[프로그래머스] 레벨1 과일장수

by 엉망으로살기 2023. 4. 18.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/135808

 

프로그래머스

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

programmers.co.kr

 

사실 이 문제는 바로 전에 포스팅했던 문제와 굉장히 유사하다고 생각한다. 

https://yoloaeee.tistory.com/331

 

[프로그래머스] 레벨3 귤 고르기

https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

yoloaeee.tistory.com

 

내가 푼 방식 때문인지 문제이름에 둘 다 과일이 들어가서인지는 모르겠지만 어쨌든 나는 Map 형태로 입출을 처리한 후에 문제방식에 따라서 추가처리를 하였다. 아무래도 HashMap을 정렬하는 내부 라이브러리가 있으면 코드 길이가 확 짧아질 것 같은데 아직까지 자바에서는 찾지 못했다. 대신 사용방법을 더욱 확실하게 알아놔야겠다는 생각을 하게 되었다.

 


문제 및 입출력


코드  
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

class Solution
{
    public static int solution(int k, int m, int[] score)
    {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int answer = 0;
 
        for(int i=0; i<score.length; i++)
        {
            if(map.containsKey(score[i]))
            {
                map.put(score[i], map.get(score[i])+1);
            }
            else
            {
                map.put(score[i], 1);
            }
        }

        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>()
        {
             @Override
             public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2)
            {
                return o2.getKey()-o1.getKey();
            }
         });
 
         int min = Integer.MAX_VALUE;
         int cnt = 0;
 
         for(int i=0; i<list.size(); i++)
         {
             cnt += list.get(i).getValue();
             min = Math.min(min, list.get(i).getKey());
 
             if(cnt>=m)
             {
                 answer += (cnt/m)*m*min;
             }
 
             cnt %= m;
 
             if(cnt!=0)
             {
                 min = Math.min(min, list.get(i).getKey());
              }
         }
 
         System.out.println(answer);
     return answer;
    }
}

반응형

댓글