코딩 테스트 챌린지

[8월 코테 챌린지] 프로그래머스 :: (Lv0) 224개 (Lv1) 60개 (Lv2) 29개 (Lv3) 3개 // 누적 316개

  • -
728x90
반응형

2024/08/17

(Lv0) 224개 (Lv1) 60개 (Lv2) 29개 (Lv3) 3개 // 누적 316개


풀이한 문제

Lv3

  1. 야근 지수
 

프로그래머스

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

programmers.co.kr

 

문제 풀이

def solution(n, works):
    works.sort(reverse=True) #[12,14,10,5,9]
    
    while True:  
        if n<=0 or list(set(works))==[0]:
            break
            
        if len(set(works))==1: #[3,3,3] n=3 [1,1] n=3
            nn = n//len(works) #1만 제거할 수 있다.
            if len(works) <= n and works[0]-nn >= 0: #3-1>=0
                n -= len(works)*nn
                works = [works[0]-nn]*len(works)
            elif len(works)<=n and works[0]-nn < 0: #[]
                n -= len(works)*works[0]
                return 0
            
            else:
                for i in range(n):
                    works[i] -= 1
                    n -= 1
                break
                
        else: #2개 이상 [14,12,10,9,5] 8
            set_w = list(set(works))
            set_w.sort(reverse=True)
            s1 = set_w[0] ; s2 = set_w[1] #12 12 10 (6)/ 10 10 10 9 (2)
            w = works.count(s1) #2

            if (s1-s2)*w < n:
                n -= (s1-s2)*w #4
                for i in range(len(works)):
                    if works[i] == s1:
                        works[i] = s2
            else:
                for _ in range(w):
                    for i in range(len(works)):
                        if n==0:
                            break
                        if works[i]==s1:
                            works[i] -= 1
                            n -= 1
                    s1 -= 1
                
        if n<=0 or list(set(works))==[0]:
            break
        works.sort(reverse=True)
    works = [w**2 for w in works]
    answer = sum(works)
    return answer

개그튼거.. 테스트 11번 문제 덕분에 ^^ㅎ 엄청 오래 걸렸다..

그리고 이 예제는 어떻게 찾은건지는 모르겠지만 10, [10, 10, 1] , 51 이 예제를 해결할 수 있으면 11번 테스트 문제도 통과된다.


미완성 문제

Lv2

  1. 구명보트
  2. 피로도
  3. 전화번호 목록

 

320x100
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.