Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 백준알고리즘
- 백트래킹
- 백준 알고리즘
- 다익스트라
- 구현
- 다이나믹 프로그래밍
- BFS
- javascript
- 브루트포스 알고리즘
- 완전탐색
- 데이터베이스
- 파이썬
- oracle
- Python
- 오라클
- SW Expert Academy
- 깊이우선탐색
- 너비우선탐색
- DP
- 문자열
- 자바스크립트
- SWEA
- 너비 우선 탐색
- DFS
- 브루트포스
- 스택
- 그래프 탐색
- 그래프 이론
- 그리디 알고리즘
- 프로그래머스
Archives
- Today
- Total
민규의 흔적
[Python 파이썬] 프로그래머스 - 피로도 본문
2024년 7월 1일
문제 링크 : 프로그래머스 - 피로도
문제 접근
규칙을 찾아야하나? 그리디하게 접근해야하나? 한 1분 고민했다. 근데 문제 조건을 보자 일말의 고민도 없이 완전탐색을 해야겠다고 결정했다.
던전의 개수는 1 이상 8 이하입니다.
문제의 조건을 잘 읽어야 하는 이유이다. N이 작기 때문에 던전을 도는 순서에 대해 모든 경우의 수를 얻어내 각 경우의 수에서 차례대로 던전을 탐험할 때 최대 몇 개까지 탐험할 수 있는지를 모든 경우의 수에서 알아보면 된다.
각 경우의 수를 확인하며 최대로 탐험할 수 있는 개수를 계속 갱신시켜주면 된다.
나는 모든 경우의 수를 얻어내기 위해 백트래킹 기법을 사용하여 문제를 해결하였다.
전체 코드
# 던전이 최대 8개이기 때문에 백트래킹으로 모든 경우의 수를 고려해보아도 괜찮겠다고 판단.
def back_tracking(dungeons, dungeons_combi, now_length, max_length, used, k):
global answer
if now_length == max_length:
can_explor = 0
for min_req, cost in dungeons_combi:
# 최소 필요 피로도 충족
if k >= min_req:
k -= cost
can_explor += 1
else:
break
answer = max(answer, can_explor)
return
for i in range(max_length):
if not used[i]:
used[i] = True
dungeons_combi.append(dungeons[i])
back_tracking(dungeons, dungeons_combi, now_length + 1, max_length, used, k)
dungeons_combi.pop()
used[i] = False
def solution(k, dungeons):
global answer
answer = 0
used_dungeons = [False] * (len(dungeons))
back_tracking(dungeons, [], 0, len(dungeons), used_dungeons, k)
return answer
if __name__ == "__main__":
k = 80
dungeons = [[80,20],[50,40],[30,10]]
print(solution(k, dungeons))
풀이 후기
문제 조건을 읽었을 때 시간복잡도 측면에서 완전탐색이 가능하다면 바로 시도해보는 것이 좋다고 생각한다.
때로는 복잡한 문제를 단순하게 접근하였을 때 오히려 적정해를 더 쉽게 구할 수 있다고 생각한다.
'BOJ' 카테고리의 다른 글
[JavaScript 자바스크립트] 백준 15662번 - 톱니바퀴(2) (0) | 2024.07.04 |
---|---|
[JavaScript 자바스크립트] 백준 1417번 - 국회의원 선거 (0) | 2024.07.03 |
[JavaScript 자바스크립트], [Python 파이썬] 백준 1213번 - 팰린드롬 만들기 (1) | 2024.07.01 |
[JavaScript 자바스크립트] 백준 1515번 - 수 이어 쓰기 (1) | 2024.07.01 |
[Python 파이썬] 백준 15649번 - N과 M (1) (0) | 2024.06.30 |