본문 바로가기
코딩 문제 풀이/프로그래머스

[프로그래머스] Lv3 문제풀이5(feat. JAVA)

by 코딩하는 랄로 2023. 10. 10.
728x90

불량 사용자

import java.util.*;

class Solution {
    public int cnt = 0;
    public Set<String> lst = new HashSet<>();
    public void permutation(String[] user_id,String[] banned_id, int depth, int n, int r) {
        if (depth == r) {
            boolean wrong = false;
            String[] slist = new String[r];
            for(int i = 0; i < r; i++) {
                if(banned_id[i].length() != user_id[i].length()){
                    wrong = true;
                    break;
                }
                for(int j = 0; j < banned_id[i].length(); j++) {
                    if(banned_id[i].charAt(j) == '*')
                        continue;
                    if(banned_id[i].charAt(j) != user_id[i].charAt(j)){
                        wrong = true;
                        break;
                    }
                }
                if(wrong)
                    break;
                else
                    slist[i] = user_id[i];
            }
            if(!wrong) {
                Arrays.sort(slist);
                lst.add(String.join("", slist));
            }
            return;
        }

        for (int i = depth; i < n; i++) {
            swap(user_id, depth, i);
            permutation(user_id, banned_id,depth + 1, n, r);
            swap(user_id, depth, i);
        }
    }

    public void swap(String[] arr, int depth, int i) {
        String temp = arr[depth];
        arr[depth] = arr[i];
        arr[i] = temp;
    }
    public int solution(String[] user_id, String[] banned_id) {
        int answer = 0;
        permutation(user_id, banned_id, 0, user_id.length, banned_id.length);
        answer = lst.size();
        return answer;
    }
}

 

 

 

보석 쇼핑

import java.util.*;

class Solution {
    public int[] solution(String[] gems) {
        int[] answer = new int[2];
        Set<String> set = new HashSet<>(Arrays.asList(gems));
        int n = set.size();

        int length = Integer.MAX_VALUE, left = 0;

        HashMap<String, Integer> hmap = new HashMap<>();
        for(int right = 0; right < gems.length; right++) {
            hmap.put(gems[right], hmap.getOrDefault(gems[right], 0) + 1);

            while(hmap.get(gems[left]) > 1) {
                hmap.put(gems[left], hmap.get(gems[left]) - 1);
                left++;
            }

            if(hmap.size() == n && length > (right - left)){
                length = right - left;
                answer[0] = left + 1;
                answer[1] = right + 1;
            }
        }

        return answer;
    }
}

 

 

 

징검다리 건너기

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public class Stone {
        int idx;
        int num;

        Stone(int idx, int num) {
            this.idx = idx;
            this.num = num;
        }
    }
    public int solution(int[] stones, int k) {
        int answer = stones[0];
        Deque<Stone> dq = new LinkedList<>();
        
        dq.add(new Stone(0, stones[0]));
        for(int i = 1; i < stones.length; i++) {
            if(dq.peekLast().num <= stones[i]) {
                if(dq.peekFirst().num <= stones[i]) {
                    dq.clear();
                } else {
                    while(dq.peekLast().num <= stones[i]){
                        dq.pollLast();
                    }
                }
            }
            dq.add(new Stone(i, stones[i]));
            if(dq.peekFirst().idx <= i - k) {
                dq.pollFirst();
            }

            if(i < k)
                answer = Math.max(answer, stones[i]);
            else
                answer = Math.min(answer, dq.peekFirst().num);
        }

        return answer;
    }
}
728x90