코딩 테스트/프로그래머스

Lv2. 피로도

  • -
728x90
반응형

문제 보기 :  피로도

 

프로그래머스

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

programmers.co.kr


문제

  • 정답률 : 60%

작성 코드

## 오류 발생 코드
def solution(k, dungeons):

    for i in range(len(dungeons)):
        kk = dungeons[i]
        kk.append(kk[0]-kk[1])
    dungeons.sort(key= lambda x:x[2],reverse=True)
    
    answer = 0
    for d in dungeons:
        if k >= d[0]:
            k -= d[1]
            answer +=1
    return answer

암튼 여러번 수정을 해봤는데도 계속 안풀려서 이 참에 완전 탐색을 공부도 해볼겸 정석대로 해보기로 했다.

 

[Python / 알고리즘] 완전탐색 : 소수찾기 (프로그래머스)

문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을

muhly.tistory.com


from itertools import permutations

def solution(k, dungeons):
    answer = 0
    d = list(permutations(dungeons,len(dungeons))) #[[30,10],[80,20],[50,40]]
    for i in range(len(d)):
        dd= d[i]
        an = 0
        remain = k
        for tt in dd:
            if remain >= tt[0]:
                remain -= tt[1]
                an +=1
        if answer < an:
            answer = an
    return answer

풀이

데이터 분석을 할 때 itertools을 몇번. 정말 손에 꼽을 정도로 써봤던거 같은데 이번에 정말 용도를 발견하게 됨...

주로 집합 만들 때 사용하는 것 같고 함수 앞에 list, set 등등 데이터 유형을 설정하면 바로 그 형태로 만들어준다는게 너무 편해서 여태 안 썼던게 억울할 정도..

이 문제는 dungeons 내 리스트들을 섞을 수 있을만큼 최대한 섞어서 사용할 수 있는 던전 수를 구하는 문제다.
리스트 구조는 [최소 필요정도, 소모정도]이며, k는 현재 피로도다.

예제)

k=8, dungeons=[[7, 3], [5, 4], [1, 1]], result=3
→ [7,3] 기준으로 8>7이므로 3을 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 5, 던전 1)
→ [5,4] 기준으로 5>=5이므로 4를 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 1, 던전 2)
→ [1,1] 기준으로 1>=1이므로 1를 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 0, 던전 3)
∴ 탐험한 던전은 3개다.

k=10, dungeons=[[9, 2], [10, 3], [7, 3], [5, 4], [1, 1]], result=4
→ [9, 2] 기준으로 10>9이므로 2을 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 8, 던전 1)
→ [10,3] 기준으로 8<10이므로 2을 소모할 수 없고 해당 던전을 탐험할 수 없다. (남은 피로도 8, 던전 1)
→ [7,3] 기준으로 8>7이므로 3을 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 5, 던전 2)
→ [5,4] 기준으로 5>=5이므로 4을 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 1, 던전 3)
→ [1,1] 기준으로 1>=1이므로 1을 소모하고 해당 던전을 탐험할 수 있다. (남은 피로도 0, 던전 4)
∴ 탐험한 던전은 4개다.

permutations으로 생성한 dungeons 순열 중 [[10, 3], [9, 2], [7, 3], [5, 4], [1, 1]]도 같은 방법으로 확인해볼 수 있다.

그럼 이제 마지막으로 순열/조합 집합에 만드는 itertools의 함수들을 정리한 뒤 포스팅을 마무리한다

#순열/조합 함수들은 모두 튜플이 반환 값이다. 

#일반순열 
permutations(iterable, n) 

#중복순열
product(iterable, repeat=num) 

#조합
combinations(iterable, n) 

#중복조합 
combinations_with_replacement(iterable객체, n) 

#중복이 없는 list 
set() 

#map 함수 : list의 모든 요소에 함수를 적용하고 iterable로 반환한다 
map(lambda x : 적용함수, iterable)

 

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv1. 옹알이(2)  (0) 2024.07.27
Lv3. 정수 삼각형  (0) 2024.07.17
Lv2. n^2 배열 자르기  (0) 2024.07.16
Lv2. 행렬의 곱셈  (0) 2024.07.16
Lv2. N개의 최소공배수  (0) 2024.07.15
Contents

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

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