morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JWT단점
  • Id Token
  • jwt
  • copy up
  • 마법사 상어와 파이어스톰
  • write skew
  • Feign Client
  • 백준20058C++
  • Refresh Token Refresh
  • Spring Boot
  • 백준 파이어스톰
  • successHandler
  • re-distribution
  • B+ Tree
  • Open Feign
  • HttpExchange
  • dirty write
  • lost update
  • HTTP Interface
  • B Tree

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow
Programmers

[Programmers] 야근 지수 (Java)

Programmers

[Programmers] 야근 지수 (Java)

2023. 11. 16. 04:02

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

프로그래머스

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

programmers.co.kr

 


숫자의 범위가 큰 수를 처리해야 하므로 일일이 처리하는 게 아니라 그리디라고 착각했다. 쉽게 구할 수 있는 수식이 있을 거라고 생각해 잘못된 생각을 했다.

남은 작업량을 모두 더해 일을 최대한 한 뒤 남은 일에 고르게 분배했다. 하지만 이러면 일이 한 쪽에 치우쳐져 있을 경우를 생각하지 못한다.

그래서 일일이 처리할 수 밖에 없다는 생각이 들었다.

알고리즘

아주 간단하게 생각했을 때 O(N^2)은 가능했다. 위의 내 생각은 O(N)인데 불가능했다. 따라서 O(NlogN)이겠다는 생각이 들었다.

logN 이 들어가는 것은 그리 많지 않다. 이진 탐색과 트리 정도이다. 따라서 트리 모양의 우선순위 큐를 사용했다.

 

작업량들을 모두 역순으로 정렬해 넣었다. 시간이 다 될때까지 제일 작업이 많이 남은 것을 꺼내 1을 빼고 다시 넣었다.

그리고 남은 작업량을 모두 제곱해서 더했다.

정답코드

import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());
for (int work : works) {
q.offer(work);
}
for (int i = 0; i < n; i++) {
int work = q.poll();
if (work == 0) break;
q.offer(work-1);
}
while (!q.isEmpty()) {
int work = q.poll();
answer += work * work;
}
return answer;
}
}

'Programmers' 카테고리의 다른 글

[Programmers] 단어 변환 (Java)  (0) 2023.11.16
[Programmers] 최고의 집합 (Java)  (1) 2023.11.16
[Programmers] 2023 KAKAO BLIND RECRUITMENT : 택배 배달과 수거하기 (Java)  (0) 2023.10.18
[Programmers] 네트워크 (C++)  (0) 2023.10.12
[Programmers] 정수 삼각형 (C++)  (0) 2023.10.12
  • 알고리즘
  • 정답코드
'Programmers' 카테고리의 다른 글
  • [Programmers] 단어 변환 (Java)
  • [Programmers] 최고의 집합 (Java)
  • [Programmers] 2023 KAKAO BLIND RECRUITMENT : 택배 배달과 수거하기 (Java)
  • [Programmers] 네트워크 (C++)
morenow
morenow

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.