밍쎄의 코딩공간

프로그래머스 LV.2 - 광물캐기 본문

프로그래머스/프로그래머스 LV.2

프로그래머스 LV.2 - 광물캐기

밍쎄 2023. 8. 25. 01:16

소싯적에 우리는 한컴타자를 했다. ㅎㅎ 

그때 광물캐기라는 코너 속 코너 게임이 있엇는디,,, 정감가드라요..~

import java.util.*;
class Solution {
    public int solution(int[] picks, String[] minerals) {
        int answer = 0;
        int num = picks[0] + picks[1] + picks[2];
        int[][] section = new int[minerals.length / 5 + 1][3];
        int i, pick;
        for(i = 0; i < minerals.length && num > 0; i++) {
            switch(minerals[i].charAt(0))
            {
                case 'd':
                    section[i / 5][0] += 1;
                    section[i / 5][1] += 5;
                    section[i / 5][2] += 25;
                    break;
                case 'i':
                    section[i / 5][0] += 1;
                    section[i / 5][1] += 1;
                    section[i / 5][2] += 5;
                    break;
                case 's':
                    section[i / 5][0] += 1;
                    section[i / 5][1] += 1;
                    section[i / 5][2] += 1;
            }
            if(i % 5 == 4) num--;            
        }
        Arrays.sort(section, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[2] < o2[2]) 
                    return 1;
                else 
                    return -1;
            }
        });
        for(i = 0, pick = 0; i < section.length; i++) {
            while(pick < 3 && picks[pick] == 0) pick++;
            if(pick == 3) break;
            picks[pick]--;
            answer += section[i][pick];
        }
        return answer;
    }
}

 

설명
  1. picks: 크기가 3인 배열로, 각 요소는 채굴 가능한 양을 나타냅니다. 이 배열은 picks[0], picks[1], picks[2]의 값을 가집니다.
  2. minerals: 보석의 종류를 나타내는 문자열 배열입니다. 각 문자열은 'd', 'i', 's' 중 하나의 문자로 시작합니다.
  3. section: 2차원 배열로, 보상을 계산하기 위한 정보를 저장합니다. section[i][0]은 보상 종류 'd'에 대한 수량, section[i][1]은 'i'에 대한 수량, section[i][2]는 's'에 대한 수량을 의미합니다.
  4. num: 총 채굴 가능한 양을 나타냅니다. 초기 값은 picks[0] + picks[1] + picks[2]입니다.
  5. 채굴 및 보상 계산 과정:
    • for 루프를 통해 minerals 배열을 순회하며 보상을 계산합니다.
    • 각 문자열의 첫 번째 글자를 확인하여 'd', 'i', 's'에 따라 section 배열을 업데이트합니다.
    • i % 5 == 4 일 때마다 num을 감소시킵니다. 이는 5개의 보상 정보를 처리한 것을 의미합니다.
  6. section 배열 정렬:
    • Arrays.sort를 사용하여 section 배열을 's' 보상의 크기에 따라 내림차순으로 정렬합니다.
  7. 보상 할당 과정:
    • for 루프를 통해 정렬된 section 배열을 순회합니다.
    • picks 배열에서 0이 아닌 값이 있는 경우 해당 보상을 할당하고 picks 값을 1 감소시킵니다.
    • answer 변수에 보상 값을 누적합니다.

 

 


 

 

밑 사이트 참고했습니다~~

https://velog.io/@qodlstjd12/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B4%91%EB%AC%BC-%EC%BA%90%EA%B8%B0-java

 

프로그래머스 광물 캐기 java

문제링크문제 조건을 읽어보면, 어차피 곡괭이 하나 들었으면 마인크래프트마냥 앞에꺼 다섯개 무조건 캐야한다.1-1 마인크래프트랑은 다르게 앞에 놓여진 블록들을 알때, 어떻게 캐야 제일 효

velog.io


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

 

프로그래머스

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

programmers.co.kr

 

728x90