[프로그래머스] 스킬 체크 레벨 2 - Java 2023.03.20

https://programmers.co.kr/skill_checks

 

프로그래머스

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

programmers.co.kr

 

스킬 체크 레벨 2단계

 

프로그래밍 초급자를 위한 기초 수준으로 설명되고 있음.

 - 1시간 2문제를 풀었습니다.

 

1번 : progresses 기능이 있고, Speed들이 각각 있을 때 언제 배포가 가능한 지(앞의 기능이 배포가 되어야 뒤에 있는 건들도 배포 가능함.)

HashMap 으로 접근( Day 일자에 몇개의 기능 배포를 하는 지)

-> LinkedHashMap으로 변경함 Key 순서대로 정답을 출력

import java.util.*;
class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        HashMap<Integer, Integer> hm = new LinkedHashMap<>();
        int days = 1;
        for(int i=0;i<progresses.length;i++){
            int progress = progresses[i];
            int speed = speeds[i];
            progress = progress + speed * days; 
            while(progress<100){

                progress+=speed;
                days++;
            }
           // System.out.println(days);
            hm.put(days, hm.getOrDefault(days, 0) + 1);
        }

        int [] answer  = new int[hm.size()];
        int idx = 0;
        for(int key : hm.keySet()){
            // System.out.println(key);

            answer[idx] = hm.get(key);
            idx++;
        }

        return answer;
    }
}

2번 : target 수를 만드는 경우의 갯 수 출력

 

DFS로 완전탐색 모든 경우의 수 를 찾아서 answer 출력

class Solution {
    static int answer = 0;
    public int solution(int[] numbers, int target) {
        answer = 0;
        dfs(0, numbers.length, target, 0, numbers);
        return answer;
    }

    public void dfs(int depth, int n , int target, int sum, int numbers[]){

        if(depth==n){
            if(target==sum){
                answer++;
            }
            return ;
        }


       dfs(depth+1, n, target, sum+numbers[depth], numbers);
       dfs(depth+1, n, target, sum-numbers[depth], numbers);


    }
}