[Python] 프로그래머스 Lv 3 - 가장 먼 노드
개고생했던 문제 중 하나. 출처 알고리즘 그저, 1번노드부터 시작해서 최단거리를 구하면 되는 문제다. BFS로 depth를 돌려줘도 되고, 다익스트라를 쓰되, 모든 거리를 1이라고 가정해도 되는 문제다. 주의할 점은, edge의 집합이 주어져 있는데, 모든 vertex에 대해 edge의 유무를 따질 경우 시간초과가 난다. 따라서, dict를 만들어야 하는데, 각 꼭지점으로 연결된 상태 파악을 위해서는 defaultdict를 활용하여, 각 꼭지점마다 연결된 다른 점들의 list를 만들어줘야 한다. 코드(1트, 실패) 그저 bfs로 푼 코드이다. 시간 초과가 걸려 실패했으며, 빼는 방향과 넣는 방향이 반대로 해야 성공하는데, 아직까지도 정확한 이유를 판단하지 못했다. 따라서, 더 확실한 방향인 다익스트라로의..
2021. 4. 29.
[Python] 프로그래머스 Lv 3 - 거스름돈
프로그래머스 Lv 3 거스름돈 문제 풀이 출처 알고리즘 단순히, 큰 거부터 고르면 큰일난다. 왜냐면, 돈의 종류에 대해서 제한이 없기에, 작은 돈의 배수가 money중에 있을 수 있 으며, 이의 경우 경우의 수가 달라진다! 따라서, 그리디로 푸는 것은 불가능. 이 문제는 다른 방법으로 풀어야 할 것이다. 그 방법은 바로 DP. 동전이 1개인 경우, 2개인 경우, 3개인 경우로 늘려야 한다. 간단한 방식인데, 동전이 2개로 해결되는 경우와 그 동전이 꼭 필요한 경우를 나눠서 합치면 된다. 예시) 1,2,5원에서 13원 의 경우의 수를 구할려면 (1, 2원으로만 13원을 만드는 경우의 수) + (5원을 끼고 1,2,5원으로 13원을 만드는 수) = (1, 2원으로만 13원을 만드는 경우의 수) + (5원 1..
2021. 4. 29.