250x250
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 |
Tags
- Effective Java
- expire_logs_days
- eslint
- regex
- REACTJS
- Effective Java 3/e
- 퀵소트
- update
- JavaScript
- REACT
- log4j2
- MySQL
- npm
- 정규표현식
- java
- current_date
- Express
- Regular expression
- upgrade
- try catch
- Chunk
- Spring Batch
- git
- mysql 5.5
- Node
- log_bin
- spring
- migration
- spring cloud
- nodejs
Archives
- Today
- Total
내 세상
[Algorithm] 백준 14501번 퇴사 본문
728x90
반응형
백준 14501번 퇴사
https://www.acmicpc.net/problem/14501
굉장히 쉬운 이유는 간절하게 퇴사를 바라기 때문 일수도 있음 ㅋ
문제 풀이
완전탐색으로 첫날을 기반으로 그 날 상담을 한다/안한다로 쭉쭉 이어나가면 됩니다.
그리고 그 중간 중간에 가장 큰 수입을 얻은 날의 금액을 answer로 저장하면 됨.
사람마다 다르겠지만, 저는 yes/no 로직을 코드로 짤 때는 dfs로 사용합니다.
이전 문제에서도 그랬지만, 재귀에서 yes인 경우와 no인 경우를 둘 다 호출하면 됩니다.
dfs라는 네이밍을 하는 이유는 그냥 옛날부터 해온 습관이고 빠르게 칠 수 있기 때문임.
맨 밑의 전체 소스 코드의 Lin 13~20 부분은 아래와 같습니다.
dfs 함수의 parameter로는 day, sum이 있음
- day : 오늘 몇 번째 날인지 (ex day = 0 이면, 첫 번째날)
- sum : 현재 날까지 수익
1 2 3 4 5 6 7 8 | void dfs(int day, int sum) { if (sum > answer && day <= N) { answer = sum; } if (day >= N) return; dfs(day + time[day], sum + profit[day]); dfs(day + 1, sum); } |
dfs(day + time[day], sum + profit[day])
- time[day] (오늘 상담이 걸리는 일수)
- profit[day] (오늘 상담으로 벌게 될 수익)
- 위의 2개 값을 parameter에 더하여 전달하여 줌으로써 그 날 상담을 진행했다는 것을 의미함.
dfs(day + 1, sum)
- 1을 더함으로써 그 날 상담을 진행하지 않고, 다음 날로 넘어가겠다는 의미
- 그 날 상담을 진행하지 않았기 때문에, 수익에도 변화가 없으므로 sum을 그대로 넘겨줌.
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 | #include <iostream> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; int N; int time[16]; int profit[16]; int answer = 0; void dfs(int day, int sum) { if (sum > answer && day <= N) { answer = sum; } if (day >= N) return; dfs(day + time[day], sum + profit[day]); dfs(day + 1, sum); } int main() { cin >> N; for (int i = 0; i < N; i++) { cin >> time[i] >> profit[i]; } dfs(0, 0); cout << answer; return 0; } | cs |
728x90
반응형
'Coding > Algorithms' 카테고리의 다른 글
[Algorithm] 백준 14888번 연산자 끼워넣기 (0) | 2019.03.17 |
---|---|
[Algorithm] 백준 13458번 시험 감독 (0) | 2019.03.17 |
[Algorithm] 백준 15686번 치킨 배달 (0) | 2019.03.17 |
[Algorithm] 백준 5373번 큐빙 (0) | 2019.03.10 |
[Algorithm] 백준 14502번 연구소 (0) | 2019.02.21 |