본문 바로가기
프로그래머스/Python

[프로그래머스] 피로도 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 28.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제의 던전의 최대 개수는 8개로 그렇게 많지가 않다. 하여 입력받은 던전에서 가능한 모든 순열의 결과를 구하고 이를 하나씩 불러오며 탐험 가능한 던전의 개수를 구한다.

모든 경우에서 탐험 가능한 던전의 개수를 구하면 최대 탐험 던전의 개수를 반환하면 된다.

 

  1. 파이썬에서는 리스트의 순열 조합의 경우를 구해주는 permutstions 함수가 있는데 이를 사용하기 위해 permutations 모듈을 불러온다. from itertools import permutations
  2. 모든 순열의 결과를 저장할 리스트를 생성한다. all = list()
  3. 던전의 순열 조합을 모두 리스트에 추가한다. for i in permutations(dungeons, len(dungeons)): all.append(i)
  4. 순열을 구할 때는 permutations(배열, 선택할 개수) 형식으로 작성해 주면 된다. 결과는 튜플로 반환된다.
  5. 각 조합별로 탐험 가능한 던전의 개수를 저장할 리스트를 생성한다. count = list()
  6. 던전의 조합 결과를 하나씩 추출한다. for i in all
  7. 남은 피로도를 저장할 변수를 생성하고 초기 피로도 값을 저장한다. power = k
  8. 탐험 가능한 던전의 개수를 저장할 변수를 생성하고 초기화한다. cnt = 0
  9. 추출한 조합 결과의 각 던전을 하나씩 추출하며 for j in i
  10. 만약 추출한 던전의 최소 피로도가 현재 피로도보다 작거나 같으면 if (j[0] <= power)
  11. 탐험 가능한 던전이므로 현재 피로도를 탐험 후 피로도로 변경한다. power -= j[1]
  12. 던전을 탐험했으므로 개수를 1 증가시킨다. cnt += 1
  13. 모든 던전을 확인했으면 탐험한 개수를 리스트에 추가한다. count.append(cnt)
  14. 모든 조합의 탐험 던전의 수를 구했으면 최댓값을 정답에 저장한다. answer = max(count)
반응형

3. 소스코드

from itertools import permutations

def solution(k, dungeons):
    answer = 0

    all = list()
    for i in permutations(dungeons, len(dungeons)):
        all.append(i)
    
    count = list()
    for i in all:
        power = k
        cnt = 0
        for j in i:
            if (j[0] <= power):
                power -= j[1]
                cnt += 1

        count.append(cnt)

    answer = max(count)
    return answer
728x90
반응형