우당탕탕 개발일지
[해시] 프로그래머스 level 3 야근지수 (Python 파이썬) - 해결 못 함 본문
💡문제 링크
💡문제 분석 요약
works 리스트의 각 원소들에서 조금씩 빼서 총 n만큼 뺀다. 각 원소의 제곱의 합이 최소가 되도록 n을 잘 배분해서 빼기. 더 이상 뺄 게 없으면 0을 반환.
💡알고리즘 설계
1. works 리스트를 내림차순으로 정렬
2. 맨 앞에 있는 원소에서 -1
3. n번 반복(works 리스트의 원소의 합이 0이면 0을 반환하고 반복문 나오기)
4. n번 반복 후 works 리스트의 원소의 제곱합 구하기
다른 풀이 가져왔는데 이것도 효율성 테스트 통과 못함
💡코드
def solution(n, works):
if n >= sum(works): return 0
while n > 0:
works[works.index(max(works))] -= 1
n -= 1
return sum([w**2 for w in works])
💡 오답 풀이
def solution(n, works):
for i in range(n):
if sum(works) == 0: return 0
works[0] -= 1
works.sort(reverse = True)
return sum([x ** 2 for x in works])
for 문 안에서 코드의 위치가 잘못 되었다.일단 내림차순으로 정렬을 한 뒤에 맨 앞에 있는, 즉 가장 큰 숫자에서 1을 빼야 한다.
def solution(n, works):
for i in range(n):
if sum(works) == 0: return 0
works.sort(reverse = True)
works[0] -= 1
return sum([x ** 2 for x in works])
바꾼 코드!
1. works 리스트를 내림차순으로 정렬
2. 맨 앞에 있는 원소에서 -1
3. n번 반복(works 리스트의 원소의 합이 0이면 0을 반환하고 반복문 나오기)
4. n번 반복 후 works 리스트의 원소의 제곱합 구하기
근데 효율성 테스트에서 통과를 못했다.
💡 다른 풀이
...
💡 느낀점 or 기억할정보
...
'알고리즘' 카테고리의 다른 글
[그리디] 프로그래머스 level 3 단속카메라 (Python 파이썬) ⭐ (0) | 2024.10.15 |
---|---|
[연습문제] 프로그래머스 level 2 연속 부분 수열 합의 개수 (Python 파이썬) (0) | 2024.10.15 |
[동적계획법(Dynamic Programming)] 프로그래머스 level 3 정수 삼각형 (Python 파이썬) (0) | 2024.09.29 |
[힙(Heap)] 프로그래머스 level 3 이중우선순위큐 (Python 파이썬) (0) | 2024.09.28 |
[완전탐색] 프로그래머스 level 2 피로도 (Python 파이썬) (1) | 2024.09.20 |