-
BOJ 10971 오랜만에 풀어보는 순회 문제알고리즘 문제풀이/Java 2020. 5. 1. 01:19
문제
https://www.acmicpc.net/problem/10971
10971번: 외판원 순회 2
첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다. 항상 순회할 수 있는 경우만 입력으로 주어진다.
www.acmicpc.net
해설
내가 처음 문제를 해결하기 위한 방법은 배열을 이용하는 것이었다.
0번 배열에 번호를 저장하고, 이후 해당 번호를 인덱스로 하는 배열에 다른 번호를 저장하는 방식으로 처리하면 문제를 해결할 수 있을 것 같았다.
34번째 줄을 추가하기 전까지는 문제를 계속 틀렸는데, 생각해보면 마지막에서 다시 0번으로 돌아가는 그 길이 존재하는 지 확인하는 과정이 없기 때문에 틀릴 수 밖에 없다.
느낀 점
- 오랜만에 푸는 알고리즘 문제였는데, 사실 처음 코드를 짜는 데만 해도, 상당히 오랜 시간이 걸렸다. 아마 감으로 문제를 풀려고 한 탓일 것이다. 문제에 주어진 조건과, 어떠한 방식으로 해결할 지를 생각하는 습관을 들이도록 하자.
- 이러한 그래프 문제나 순회 문제의 경우, DP문제와 다르게 반례를 찾기가 어려워 논리적으로 풀어내기가 어려운 부분이 있다. 하지만 천천히 하나하나 과정의 정확성을 따져가면서 디버깅을 한다면 문제의 정답에 다다를 수 있을 것 같다.
'알고리즘 문제풀이 > Java' 카테고리의 다른 글
BOJ 2178 DFS? BFS? DP? (0) 2020.05.04 BOJ 6064 나머지 정리 (0) 2020.05.01 BOJ 2225 합분해 (0) 2020.04.18 DP - 점화식의 중요성(BOJ 11052, 16194) (0) 2020.04.17 BOJ 2004, 1676 - 팩토리얼에 대한 접근 (0) 2020.04.15