반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- Java
- 프로그래머스
- springboot
- 파이썬
- Kakao
- Python
- 엘라스틱서치
- 리눅스
- programmers
- DPDK
- 스프링
- 도커
- 스프링부트
- Linux
- 네트워크
- 백엔드
- IT
- C
- 프로그래머스 #카카오 #IT #코딩테스트
- 알고리즘
- Spring
- 쿠버네티스
- 캐시
- docker
- Elasticsearch
- 카카오
- 개발자
- 운영체제
- 자바
Archives
- Today
- Total
저고데
[프로그래머스]야근 지수 본문
728x90
반응형
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드를 작성하기 위한 순서는 다음과 같다.
1. 효율성을 위하여 최대힙을 사용한다.
2. works의 합이 n보다 작은 경우에는 모든 작업을 해결할 수 있는 경우이기 때문에 바로 0을 리턴한다.
3. 힙에 works 값들을 담아준다.
4. 가장 큰 값을 하나씩 빼줘야 제곱을 했을 때, 최솟값이 되기 때문에 힙에서 가져온 값을 -1 해주고 다시 힙에 넣어준다.
5. 힙의 모든 원소를 제곱하여 더해준다.
import heapq #1번
def solution(n, works):
answer = 0
heap=[]
if sum(works)<n: #2번
return 0
for i in works: #3번
heapq.heappush(heap, -i) #힙은 최소힙이 기본이기 때문에 -를 사용하여 최대힙으로 만들어준다.
for i in range(n): #4번
value=-heapq.heappop(heap)
heapq.heappush(heap,-(value-1))
for i in heap: #5번
answer+=(-i)**2
return answer
모든 원소를 제곱하고 더했을 때, 최솟값이 나와야하기 때문에 가장 큰 값에 -1을 해주는 것이 관건이었다.
처음에는 max()를 사용하여 일일이 가장 큰 값을 찾아서 빼주는 코드를 작성하였다.
max()를 사용한 탓에 정확성은 있었으나 효율성이 엉망이었다.
따라서 최소, 최대 관련 문제는 힙을 우선적으로 사용하는 것이 좋을 듯하다.
처음 작성한 코드
def solution(n, works):
answer = 0
if sum(works)<n:
return 0
for i in range(n):
works[works.index(max(works))]-=1
for i in works:
answer+=i**2
return answer
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스][3차]압축 (0) | 2023.02.03 |
---|---|
[프로그래머스]땅따먹기 (0) | 2023.02.03 |
[프로그래머스]가장 가까운 같은 글자 (1) | 2023.02.02 |
[프로그래머스]귤 고르기 (0) | 2023.02.02 |
[프로그래머스][1차]뉴스 클러스팅 (0) | 2023.02.02 |