Algorithm
[Programmers] LV2. 광물 캐기
풀긴했는데 너무 비효율적이게 푼거같다.. 나중에 수정해야지 ㅠㅠ // LV2. 광물캐기 23.03.29 public static int solution_mineral2(int[] picks, String[] minerals) { return IntStream.iterate(0,i->i+5).limit(Arrays.stream(picks).sum()) .mapToObj(r -> Arrays.stream(minerals) .skip(r).limit(5) .mapToInt(a->mineral.valueOf(a).ordinal()).boxed() .collect(Collectors.toList())) .sorted(Comparator.comparing((List a)->a.stream().filter(b->b=..
[Programmers] LV2. 최솟값 만들기
//LV2. 최솟값만들기 public int solution_make_min_value(int []A, int []B){ Arrays.sort(A); Arrays.sort(B); return IntStream.range(0,A.length).map(i->A[i]*B[B.length-i-1]).sum(); }
[Programmers] LV2. 올바른 괄호
처음에 replace로 간단하게 풀려했다가 효율성 통과를 못해서 스택으로 변경했다.ㅠㅠ 스택을 사용한 경우엔 시간복잡도가 O(N)이고 replace를 사용한 경우 O(N²)이라고 한다. 앞으로는 귀찮다고 불필요하게 replace를 남용하면 안될거같다. //LV2. 올바른 괄호 public static boolean solution_correct_bracket(String s) { int i=0; Stack stack = new Stack(); while(i
[Programmers] LV1
LV1 문제들은 여러가지 방식 사용해서 풀어보고 싶어서 효율성 생각 안하고 풀었다.. ㅎㅎ 특히 람다 사용하고 싶어서 억지로 쓴 문제들이 많음 // Lv.1 신고 결과 받기 public static int[] solution_RepostResult(String[] id_list, String[] report, int k) { Map repomap = new HashMap(); // 신고 당한 횟수 Map repomapList = new HashMap(); // 신고 기록 Arrays.asList(id_list).forEach(id -> { repomap.put(id, 0); repomapList.put(id, new ArrayList()); }); Arrays.stream(report).distinct(..
[Programmers] LV.2 귤고르기
// LV.2 귤고르기 public static int solution_choice_tangerine(int k, int[] tangerine) { int answer = 0; Long[] arr = Arrays.stream(tangerine).boxed() .collect(Collectors.groupingBy(Function.identity(),Collectors.counting())) .values().toArray(Long[]::new); Arrays.sort(arr,Comparator.reverseOrder()); int sum = 0; for(Long i : arr){ sum += i; answer++; if(k
[Programmers] LV2. 2개이하로 다른 비트
//LV2. 2개이하로 다른 비트 2022.07.26 완료 public static long[] solution_under_two_bit(long[] numbers) { long[] answer = new long[numbers.length]; for(int i = 0; i < numbers.length;i++){ String target = Long.toBinaryString(numbers[i]); int idx = target.lastIndexOf("0"); if(idx == target.length()-1){ // 마지막숫자가 0일경우 answer[i] = numbers[i]+1; }else if(idx == -1){ // 첫자리가 0일 경우 answer[i] = Long.parseUnsignedL..
[Programmers] LV2. 기능개발
// 20220726 완료 // LV2. 기능개발 [https://school.programmers.co.kr/learn/courses/30/lessons/42586] public static int[] solution_develop_skill(int[] progresses, int[] speeds) { List answerList = new ArrayList(); boolean flag = false; int idx=0,date=0,cnt=1; while(idx < progresses.length) { if (progresses[idx] + (date * speeds[idx]) < 100) { if(flag){ answerList.add(cnt); cnt = 1; } date++; flag = fals..