(Java) 프로그래머스 - 야근 지수

2022. 10. 5. 19:34·코딩 테스트

효율성 테스트를 통과하기 어려웠던 문제였다.

최대한 시간 복잡도를 줄여서 코드를 작성하려고 노력했지만

한 번에 통과하진 못하고 여러 가지 로직으로 시도해서 성공했다.

 

로직

첫 번째 시도는 list를 사용해서 최댓값의 인덱스를 찾고 set을 통해 값을 변경하는 로직이었지만

효율성에서 통과하지 못했다. 아마 최댓값의 인덱스를 찾는 과정에서 시간이 꽤 소요돼서 통과하지 못했던 것 같다.

 

두 번째 시도는 매번 배열을 정렬하면서 가장 뒤에 있는 값에 -1 해주며 n을 줄이는 로직으로 시도했지만 이것도 효율성을 통과하지 못했다.

 

마지막 시도는 내림차순 우선순위 큐를 선언하고 큐의 가장 앞에 있는 값을 줄이는 로직으로 성공했다.


실패 코드

import java.util.*;
class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < works.length; i++) {
            list.add(works[i]);
        }

        while (n > 0) {
            int idx = list.indexOf(Collections.max(list));
            if (list.get(idx) == 0) {
                break;
            }
            list.set(idx, list.get(idx) - 1);
            n--;
        }

        for (int i = 0; i < list.size(); i++) {
            answer += Math.pow(list.get(i), 2);
        }
        return answer;
    }
}

 

최종 코드

import java.util.*;
class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        // 내림차순 우선순위 큐 선언
        PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
        
        // 큐에 배열값 넣기
        for (int i = 0; i < works.length; i++) {
            queue.add(works[i]);
        }
        
        while (n > 0) {
            // 가장 큰 수가 0이면 탐색중단
            if (queue.peek() == 0) {
                break;
            }
            queue.add(queue.poll() - 1);
            n--;
        }
        
        // 큐에 있는 값 제곱해서 더하기
        while (!queue.isEmpty()) {
            answer += Math.pow(queue.poll(), 2);
        }
        return answer;
    }
}
저작자표시 (새창열림)

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 할인 행사  (0) 2022.10.07
(Java) 프로그래머스 - 네트워크  (0) 2022.10.06
(Java) 프로그래머스 - 최고의 집합  (0) 2022.10.04
(Java) 프로그래머스 - 이중우선순위큐  (0) 2022.09.30
(Java) 프로그래머스 - 정수 삼각형  (0) 2022.09.29
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 할인 행사
  • (Java) 프로그래머스 - 네트워크
  • (Java) 프로그래머스 - 최고의 집합
  • (Java) 프로그래머스 - 이중우선순위큐
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 야근 지수
상단으로

티스토리툴바