다이어트를 하기위해 최적의 햄버거를 찾는 최고의 문제다 실생활에서 우리가 마주칠수있는 현실적인 문제 굿 일단 이 문제는 DP를 이용해서 풀 수 있다 내가 L 칼로리 이하를 먹어야만한다 그럼 N개의 버거 중 1) 현재 버거를 먹을때 2) 현재 버거를 안먹을때 두개를 비교해주면 된다 이 때 현재 버거를 먹기위해선 칼로리(sum+b[pos])가 L 이하여야 한다! 그럼 그 값들 중 최대값을 찾아보자! 소스코드 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 import java.util.Scanner; public class Solution { public stati..
문제를 읽으면 그냥 다익스트라처럼 생겼다 그래프를 그리고 내가 최소시간을 들여 원하는 정점으로 가면 된다 근데 조건이 하나 붙는다 100을 초과는 거리를 간다면 그때는 연료를 충전해야 한다 이걸 매번 정점에서 하는줄알고 처음에 틀렸다 ㅎㅎ 결국 내가 갈수있는 거리도 하나의 가져가야할 데이터가 되므로 테이블을 d[정점의 수][갈 수 있는 거리]로 잡아보자 => d[1010][111]; 최대 정점은 1000개고 갈수있는 거리는 한번에 100이다 그리고 다익스트라를 돌리면서 pq에서 내가 남은거리도 들고다니면 된다 만약 남은거리보다 다음정점까지 거리가 같거나 짧으면 그냥 가면된다 하지만 남은거리가 더 짧으면 시간 5를 추가해 충전하고 주행가능거리를 100이라고 생각하자! 그리고 마지막으로 정점 n+1에서 남은..
문제를 푸는것보다 이해하는게 더 어려운 문제같다 문제를 풀려면 그냥 쓰여져있는대로 코딩하면 된다! 하라는대로!! a와 b가 i-1이하기 때문에 무조건 이전에 계산한 식을 통해 값을 구할 수 있다 그럼 for문을 통해 N-1개의 값들을 먼저 저장하고 그걸 이용해서 f(x)값을 구해보자! 소스코드 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 45 46 47 48 49 import java.util.Scanner; public class Solution { static class Node { int tx,ax,bx; Node(int _t..
옛날에 풀어본 문제여서 다시 풀어보려고 했는데 탈탈 털렸다 옛날에는 어떻게 풀었을까? 도움을 받았었나 ㅎㅎ 이 문제는 하이퍼링크는 연결되어있기 때문에 안에서는 비용이 안들고 하이퍼링크를 넘어갈 때는 비용이 든다는걸 그래프로 표현해야한다 어떻게 해야할까..! 그래프를 만들때 (N+M)개의 정점으로 만들어주면 된다! 1~N 까지는 정점이고 (N+1 + M)까지는 바로 하이퍼링크..! 내가 어떤 점 X 가 하이퍼링크 K에 속해있다면 그래프 X에서는 갈 수 있는 하이퍼링크 K에 연결시켜주고 1의 비용이 들고 반대로 하이퍼링크 K 에서는 갈 수 있는 점들 X를 연결하고 하이퍼링크 안에서 이동이므로 비용은 0이 된다! 그래서 그래프를 만들면 X -> K (비용 1) 하이퍼링크 밖에서 이동 (정점 X를 가진 하이퍼링..