우당탕탕 개발일지

[해시] 프로그래머스 level 3 야근지수 (Python 파이썬) - 해결 못 함 본문

알고리즘

[해시] 프로그래머스 level 3 야근지수 (Python 파이썬) - 해결 못 함

민아당긴아 2024. 10. 3. 12:18

💡문제 링크

 

프로그래머스

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

programmers.co.kr

 

 

💡문제 분석 요약

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 기억할정보

...