일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- python
- SW Expert Academy
- SW ExpertAcademy
- 2020 카카오 인턴십
- 미세먼지 안녕!
- 1789번
- 19238번
- 빛의 경로 사이클
- 15686번
- 스타트 택시
- 16234번
- 9095번
- 경주로 건설
- 17144번
- 키패드 누르기
- 파이썬
- 12865번
- 베스트엘범
- QueryDSL 기초
- 백준 알고리즘
- 수식 최대화
- 감소하는 수
- 12869번
- 14499번
- HTML 기초
- 어른 상어
- 보석 쇼핑
- 프로그래머스
- 1038번
- 거울 설치
Archives
- Today
- Total
보물창고 블로그
백준 알고리즘 14501번 퇴사 풀이 With Python 본문
728x90
문제 링크: https://www.acmicpc.net/problem/14501
이 문제를 2가지 방법으로 풀었습니다. DFS(깊이 우선 탐색) 방법과 BFS(너비 우선 탐색)으로 해결하였는데,
DFS 방법으로 푼 코드는 다음과 같습니다.
def solution(n, task):
answer = 0
# count day money
# 인덱스 날짜 돈
stack = [[0, 0, 0]]
while stack:
count, day, money = stack.pop()
#만약 현재 날짜가 지금 위치한 날보다 작을 경우 날짜를 현재 위치한 날로 갱신한다.
if day<count:
day=count
#마지막 날까지 모두 탐색한 경우 answer값과 돈의 크기를 비교하여 answer값을 갱신한다.
if count == n:
if money > answer:
answer = money
else:
# 현재 인덱스의 일을 하였을 때, 최종 날짜안에 할 수 있는지 확인
if day < count+1 and count + task[count][0] <= n:
stack.append([count + 1, day + task[count][0], money + task[count][1]])
# 현재 인덱스의 일을 포함 하지 않았을 경우를 더한다.
stack.append([count + 1, day, money])
return answer
n = int(input())
task = []
for _ in range(n):
a, b = map(int, input().split())
task.append([a, b])
answer=solution(n,task)
print(answer)
'알고리즘 풀이 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 19236번 청소년 상어 풀이 With Python (1) | 2020.06.30 |
---|---|
백준 알고리즘 19235번 모노미도미노 풀이 With Python (6) | 2020.06.30 |
백준 알고리즘 새로운 게임2 풀이 With Python (0) | 2020.03.10 |
백준 알고리즘 17822번 원판 돌리기 풀이 With Python (0) | 2020.03.10 |
백준 알고리즘 17825번 주사위 윷놀이 풀이 With Python (0) | 2020.03.10 |
Comments