목록알고리즘/탐색 (6)
-
불https://www.acmicpc.net/problem/5427 예외사항 : 13 3* . .@ * .* . . 위와 같은 상황을 처리하지 못했음.12345678910111213141516171819for(int i = 0; i
역사https://www.acmicpc.net/problem/1613 [문제 풀이]첫 줄에 있는 사건의 개수 n과 전후관계 개수 k을 입력받는다.map[n][n] 배열을 생성한 후전후관계 k개(row, col 형태)를 입력받는데map[row][col] = -1map[col][row] = 1이렇게 설정한다. 예제로 입력된 정보를 토대로 맵을 생성해보면 -1-1 1 -1 -1 1 1 -1 11 이런 형태의 맵이 나오게 된다.이 상태에서 플로이드 와샬 알고리즘을 사용하여 완전탐색을 하면 된다. if(map[row][k] != 0 && map[row][k] == map[l][col]){map[row][col] = map[row][k];} 0-1-1-1010-1-10110-101110000000 탐색결과 위와 같..
배열에서 이동https://www.acmicpc.net/problem/1981 탐색이다!! 너비 우선 탐색을 해야 할 것 같은 느낌이 들긴 하는데... DP를 같이 써야 하나?? 고민하다 알고리즘 분류를 보니 BFS + 이분탐색 이다.이분탐색이라니.. 어느 부분에서?? 흠흠.....오래 걸리기도 하고 많이 틀리기도 한 문제 [문제 풀이]1. 숫자들을 입력받는다. 입력받을 때 max값과 min값을 저장해놓는다.2. (int) diff = max - min을 구한다. => 우리는 max - min의 최솟값을 찾아야 한다. => 그리고, 우리가 구하고자 하는 답의 범위는 0
2186 문자판 https://www.acmicpc.net/problem/2186 [문제 풀이] 문제 분류는 BFS라고 되어 있으나, 나는 DFS와 DP를 이용해서 풀었다.나는 이 문제를 푸는 아이디어를 1937번 욕심쟁이 판다에서 얻었다. 신경써야 할 점이 있다면 1. 한번에 K칸씩 직선으로 움직일 수 있다 2. BREEZE와 같이 같은 단어가 있는 문자열을 어떻게 처리할 것인가두 가지 정도로 생각할 수 있다..
케빈 베이컨의 6단계 법칙 1389https://www.acmicpc.net/problem/1389 [풀이 방법]이 문제 역시 dfs, bfs, 플로이드 와샬 알고리즘 등 다양한 방법으로 풀 수 있다.난 플로이드 와샬 알고리즘으로 풀어봐야지... 가장 간단한 방법인 것 같다. 1. 첫째 줄에 N과 K를 입력받는다. N은 정점, K는 간선의 수라고 생각했다. 2. relation이라는 N+1 X N+1 행렬을 생성 후 이후에 나오는 간선 정보들을 저장했다. 여기서, 1이 3을 알때 3도 1을 안다고 볼 수 있으므로 relation[1][3] = 1 relation[3][1] = 1 을 해준다. 3. 탐색을 시작한다.relation[r][k] != 0이고 relation[k][c] != 0 일때 -relat..
경로 찾기 11403https://www.acmicpc.net/problem/11403 [문제 풀이] 이 문제를 푸는 방법은 여러 가지가 있다. 나는 bfs, dfs, 플로이드 와샬 알고리즘 중 플로이드 와샬 알고리즘을 이용해 풀었다.플로이드와샬 알고리즘은 형태가 정해져있기 때문에 모든 경로를 탐색하는 문제에 적용하기 쉬운 것 같다. 1. 모든 입력은 0과 1로 이루어져있다. 나는 입력을 받은 후 int형으로 바꾸지 않고 String형 그대로 map에 저장했다. 2. 정점 r에서 k로 가는 경로가 존재하고, 정점 k에서 c로 가는 경로도 존재한다면 정점 r에서 c로 가는 경로 또한 존재한다고 볼 수 있기 때문에 map[r][c]를 1로 설정해 주면 된다. 3. 탐색을 모두 마치고 출력하면 끝. 12345..