티스토리 뷰
문제 설명
서울에서 경산까지 여행을 하면서 모금 활동을 하려 합니다. 여행은 서울에서 출발해 다른 도시를 정해진 순서대로 딱 한 번 방문한 후 경산으로 도착할 예정입니다. 도시를 이동할 때에는 도보 혹은 자전거를 이용합니다. 이때 도보 이동에 걸리는 시간, 도보 이동 시 얻을 모금액, 자전거 이동에 걸리는 시간, 자전거 이동 시 얻을 모금액이 정해져 있습니다. K시간 이내로 여행할 때 모을 수 있는 최대 모금액을 알아보려 합니다.
예를 들어 여행 루트가 다음과 같고 K = 1,650 일 때
1, 2번 구간은 도보로, 3번 구간은 자전거로 이동해 모금액을 660으로 하는 것이 가장 좋은 방법입니다. 이때, 1,600시간이 소요됩니다.
solution 함수의 매개변수로 각 도시를 이동할 때 이동 수단별로 걸리는 시간과 모금액을 담은 2차원 배열 travel과 제한시간 K가 주어집니다. 제한시간 안에 서울에서 경산까지 여행을 하며 모을 수 있는 최대 모금액을 return 하도록 solution 함수를 작성하세요.
제한사항
- travel 배열의 각 행은 순서대로 [도보 이동에 걸리는 시간, 도보 이동 시 얻을 모금액, 자전거 이동에 걸리는 시간, 자전거 이동 시 얻을 모금액]입니다.
- travel 배열 행의 개수는 3 이상 100 이하인 정수입니다.
- travel 배열에서 시간을 나타내는 숫자(각 행의 첫 번째, 세 번째 숫자)는 10,000 이하의 자연수, 모금액을 나타내는 숫자(각 행의 두 번째, 네 번째 숫자)는 1,000,000 이하의 자연수입니다.
- K는 0보다 크고 100,000보다 작거나 같은 자연수입니다.
입출력 예
Ktravelreturn
1650 | [[500, 200, 200, 100], [800, 370, 300, 120], [700, 250, 300, 90]] | 660 |
3000 | [[1000, 2000, 300, 700], [1100, 1900, 400, 900], [900, 1800, 400, 700], [1200, 2300, 500, 1200]] | 5900 |
입출력 예 설명
입출력 예#1
앞서 설명한 예와 같습니다.
입출력 예#2
1, 4번 구간은 도보로 이동하고 2, 3번 구간은 자전거로 이동하여 모금액을 5,900원으로 하는 것이 가장 좋은 방법입니다. 이때 걸리는 시간은 3,000시간입니다.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int K, vector<vector<int>> travel) {
int answer = 0;
vector<vector<int>> cache(travel.size()+1, vector<int> (K+1, 0));
cache[0][travel[0][0]] = travel[0][1];
cache[0][travel[0][2]] = travel[0][3];
for (int i = 1; i < travel.size(); i++) {
for (int j = 0; j <= K; j++) {
if (cache[i-1][j] == 0) {
continue;
}
int walking_time = travel[i][0];
int walking_price = travel[i][1];
int biking_time = travel[i][2];
int biking_price = travel[i][3];
if (j + walking_time <= K){
cache[i][j+walking_time] = max(cache[i][j+walking_time], cache[i-1][j] + walking_price);
if (i == travel.size() - 1) {
answer = max(answer, cache[i][j+walking_time]);
}
}
if (j + biking_time <= K) {
cache[i][j+biking_time] = max(cache[i][j+biking_time], cache[i-1][j] + biking_price);
if (i == travel.size() - 1) {
answer = max(answer, cache[i][j+biking_time]);
}
}
}
}
return answer;
}
|
'Dev.CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스 c++] 숫자 야구 (0) | 2019.09.16 |
---|---|
[프로그래머스 c++] 네트워크 (0) | 2019.09.05 |
[프로그래머스 c++] 정수 삼각형 (0) | 2019.09.05 |
[프로그래머스 c++] (2017년)KAKAO BLIND RECRUITMENT[1차] > 비밀지도 (0) | 2019.09.04 |
[프로그래머스 c++] (2018년)KAKAO BLIND RECRUITMENT > 실패율 (0) | 2019.09.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dfs
- 알고리즘
- 이진트리
- 컬렉션
- Swift
- Xcode
- Programmers
- aws
- isempty
- count
- dp
- 프로그래머스
- 깊이우선탐색
- ios
- Collection
- SummerCoding
- c++
- 스위프트
- algorithm
- 백준
- 서머코딩
- BFS
- 자료구조
- 호제법
- datastructure
- ec2
- 시뮬레이션
- 코딩테스트
- 구슬탈출
- 삼성역량테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함