일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 먹방
- 키크론
- Sonnet
- 갈축
- 테크
- 프로그래머스
- programmers
- 로우프로파일
- claude 3.5
- llama 3.1
- 코딩테스트
- 닥터마틴
- Gemini
- 바이커부츠
- llama
- keychron
- keychron k1
- 닥터마틴20홀
- 롱부츠
- DeepMind
- 닥마
- 적축
- claude
- Ai
- 제미나이
- 닥터마틴vonda
- 키크론 k1
- 코테
- 나폴리탄
- 닥터마틴14홀
- Today
- Total
Daily Tech 먹방
3/31(일) 오늘의 코테 3 - 피로도 본문
코딩테스트 연습 - 피로도 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 및 접근 방식
"피로도" 문제는 완전탐색(브루트포스) 문제입니다.
이 문제에서는 각 던전마다 "최소 필요 피로도"와 "소모 피로도"가 주어지고, 유저가 현재 가진 피로도(k)를 사용해 탐험할 수 있는 최대 던전 수를 찾아야 합니다.
1. 문제 설명
* 유저는 하루에 여러 던전을 탐험할 수 있으며, 각 던전을 탐험하기 위해서는 해당 던전의 "최소 필요 피로도" 이상의 피로도를 가지고 있어야 하고, 던전 탐험 후에는 "소모 피로도"만큼 피로도가 감소합니다.
* 유저의 초기 피로도와 각 던전의 "최소 필요 피로도" 및 "소모 피로도"가 2차원 배열로 주어집니다.
* 유저가 탐험할 수 있는 최대 던전 수를 반환해야 합니다.
2. 풀이 과정
* 완전 탐색을 이용하여 모든 던전 탐험 순서의 조합을 고려합니다.
* 각 조합에서 유저가 탐험할 수 있는 던전 수를 계산합니다.
- 유저의 현재 피로도가 던전의 "최소 필요 피로도" 이상이면, 해당 던전을 탐험할 수 있습니다.
- 던전을 탐험할 때마다 유저의 피로도는 해당 던전의 "소모 피로도"만큼 감소합니다.
* 가능한 모든 조합 중에서 유저가 탐험할 수 있는 최대 던전 수를 찾아 반환합니다.
정답 코드
from itertools import permutations
def solution(k, dungeons):
max_dungeon_count = 0 # 탐험할 수 있는 최대 던전 수
# 모든 던전 순서의 조합을 고려
for dungeon_order in permutations(dungeons, len(dungeons)):
fatigue = k # 초기 피로도
count = 0 # 탐험한 던전 수
for dungeon in dungeon_order:
min_fatigue, use_fatigue = dungeon # 최소 필요 피로도, 소모 피로도
# 던전 탐험 가능 여부 확인
if fatigue >= min_fatigue:
fatigue -= use_fatigue # 피로도 감소
count += 1 # 탐험한 던전 수 증가
else:
break # 더 이상 탐험 불가능하면 중단
max_dungeon_count = max(max_dungeon_count, count) # 최대 탐험 가능 던전 수 갱신
return max_dungeon_count
이 코드는 주어진 모든 던전의 순서 조합을 생성하고, 각 조합에 대해 유저가 탐험할 수 있는 던전 수를 계산합니다.
모든 조합 중에서 가장 많은 던전을 탐험할 수 있는 경우의 던전 수를 최종적으로 반환합니다.
import하지 않고 재귀로 순열 구현하기
def solution(k, dungeons):
def explore(fatigue, dungeons, count=0):
# 모든 던전을 탐험할 수 없는 경우, 현재 카운트 반환
if not dungeons:
return count
# 탐험 가능한 던전이 있는지 확인
can_explore = False
for dungeon in dungeons:
if fatigue >= dungeon[0]:
can_explore = True
break
if not can_explore:
return count
max_count = count
for i, dungeon in enumerate(dungeons):
min_fatigue, use_fatigue = dungeon
if fatigue >= min_fatigue:
# 던전을 탐험하고, 남은 던전 리스트에서 현재 던전을 제외
next_dungeons = dungeons[:i] + dungeons[i+1:]
# 재귀적으로 다음 던전 탐험 시도
explored_count = explore(fatigue - use_fatigue, next_dungeons, count + 1)
if explored_count > max_count:
max_count = explored_count
return max_count
return explore(k, dungeons)
이 코드는 던전 탐험 가능 여부를 확인하는 부분에서 직접 조건을 검사합니다.
각 던전을 순회하며, 현재 피로도로 탐험할 수 있는지 여부를 체크합니다.
만약 탐험할 수 있는 던전이 있다면 해당 던전을 탐험하고, 재귀적으로 남은 던전에 대해 같은 과정을 반복합니다.
이렇게 하여, 모든 가능한 던전 탐험 조합을 고려하고, 최대로 탐험할 수 있는 던전의 수를 계산합니다.
'코테' 카테고리의 다른 글
4/2(화) 오늘의 코테 3 - 택배상자 (0) | 2024.04.02 |
---|---|
4/2(화) 오늘의 코테 2 - 피보나치 수 (0) | 2024.04.02 |
4/2(화) 오늘의 코테 1 - 음양 더하기 (0) | 2024.04.02 |
3/31(일) 오늘의 코테 2 - 크기가 작은 부분 문자열 (0) | 2024.03.31 |
3/31(일) 오늘의 코테 1 - 콜라츠 추측 (0) | 2024.03.31 |