Algorithm/프로그래머스

[프로그래머스] - 더 맵게

 

 

sudo code

섞은 음식의 스코빌 지수 = 
가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

섞은 음식의 스코빌 지수 >= k => return mixCount
int[] scoville을 arraylist로 바꾸고
최대로 섞는 횟수는 scoville.length - 1

반복문
{
오름차순으로 sort
mixScoville = 가장 덜 매운것 + 두번째 * 2
섞은게 K보다 스코빌지수가 높거나 같으면 시도 횟수 return
높지 않다면?
sort를 했으므로 앞에 0, 1요소 삭제
mixScoville add해주기
}

조건 미흡시 return -1

 

1차 시도

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] scoville, int K){
        int allMixcase = scoville.length - 1;
        int mixScoville = 0;

        ArrayList<Integer> tempScoville = (ArrayList<Integer>) Arrays.stream(scoville)
            .boxed().collect(Collectors.toList());

        for(int cnt = 0; cnt < allMixcase; cnt++)
        {
            Collections.sort(tempScoville);
            mixScoville = tempScoville.get(0)+tempScoville.get(1)*2;
            if(mixScoville >= K) return cnt+1;
            else
            {
                tempScoville.remove(0);
                tempScoville.remove(0);
                tempScoville.add(0,mixScoville);
            }
        }
        return -1;
    }
}

채점 결과
정확성: 28.6
효율성: 0.0
합계: 28.6 / 100.0

 

2차시도 - 문제 요구사항을 좀 더 읽어봤습니다. 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] scoville, int K){
        int allMixcase = scoville.length-1;
        int mixScoville = 0;

        ArrayList<Integer> tempScoville = (ArrayList<Integer>) Arrays.stream(scoville)
            .boxed().collect(Collectors.toList());

        Collections.sort(tempScoville);
        
        if(tempScoville.get(0) >= K) return 0; // 최소가 k보다 클 경우
        
        for(int cnt = 0; cnt < allMixcase; cnt++)
        {
            mixScoville = tempScoville.get(0)+(tempScoville.get(1)*2);
            tempScoville.remove(0);
            tempScoville.remove(0);
            tempScoville.add(mixScoville);
            Collections.sort(tempScoville);
            if(tempScoville.get(0) >= K) return cnt+1;
        }
        return -1;
    }
}
(정확성 다 맞고 효율성 다 틀리기)
정확성: 76.2
효율성: 0.0
합계: 76.2 / 100.0