분류 전체보기(289)
-
[BOJ_1753 | Dikjstra]최단경로
풀이 문제 자체는 다익스트라 알고리즘을 이용해서 한 노드에서 다른 모든 노드들에 이르는최단 경로를 출력하면 되는 간단한 문제였다. 우선순위 큐 (Priority Queue)를 이용해서 다익스트라 알고리즘을 구현했고, 우선순위 큐를 이용하기 위해서 목적지 노드의 인덱스와 시작점으로부터의 거리를 저장하는 Element라는 원소 클래스를 정의하였다. *우선순위큐를 이용한 다익스트라 알고리즘은 시간 복잡도가 O(ElogV)정도이다. 문제는 간단했으나, 문제에 걸린 제약조건이 보기보다 꽤나 까다로웠다. 맨 처음에는 인접행렬과 Scanner를 통해 알고리즘을 수행했으나메모리초과와 시간초과가 동시에 발생하였다. 메모리 초과 이유는 인접행렬을 사용했기 때문인데,예를 들어 2만개의 노드가 존재한다면, Integer형을 ..
2019.01.24 -
[BOJ_11562 | Floyd]백양로 브레이크
풀이 플로이드 와샬 알고리즘을 응용해야 하는 쉽지만은 않은 문제였던것 같다.숫자에 의미를 부여하여 그래프를 구성해야 하고, 이 의미를 부여하여 그래프를 완성하는 과정 자체가생각해내기 쉽지는 않았다. 문제 해결을 위한 생각의 과정은 다음과 같다.예를 들어 1 2 0 이라는 input이 주어지면 1에서 2로 가는 경로를 dis[1][2] 배열에 생성한다. 즉, 0이라는 값을 배열에 넣어준다는 것이다. 그리고 여기서 중요한 것이 2에서 1로 가는 경로가 없지만, 1에서 2로 가는 경로가 있기 때문에양방향의 경로가 연결될 가능성이 있으므로, 1이라는 값을 dis[2][1]에 넣어준다. 다시말해서, 이미 단방향이든, 양방향이든 경로가 있으면 거기에는 도로를 추가할 일이 없으므로 0을 넣어주고단방향의 경로가 없지만..
2019.01.22 -
[BOJ_10159 | Floyd]저울
풀이 저울 문제는 그래프 이론과 연관지으려고 한다면 플로이드 와샬 알고리즘을 이용해서 그리 어렵지 않게 해결할 수 있는 문제이다.물건 1보다 2가 가벼운 경우, 즉 1 > 2 인 경우, 1에서 2로 가는 유향 그래프의 경로가 있다고 생각하면 된다.이렇게 생각하면 물건 1과의 비교 결과를 알 수 없는 물건의 개수는 플로이드 와샬 알고리즘을 이용하여 각각의 물건에 대해 경로가 없는 물건의 개수, 즉 거리가 inifinite한 점들의 개수를 카운트 해주면 된다. 따라서 플로이드 와샬 알고리즘을 그대로 적용하되,무방향 그래프가 아닌 유향 그래프임을 감안하여 해결해주어야 하며, 또 한 가지 주의할 점은, 1 > 2 라는 결과값이 주어졌을 때에는물건 1에 대해 2도 비교할 수 있을 뿐더러물건 2에 대해 1도 비교할..
2019.01.20 -
[BOJ_1389 | Floyd]케빈 베이컨의 6단계 법칙
풀이 플로이드 와샬 알고리즘을 조금만 응용할 수 있다면 쉽게 해결되는 문제이다.그래프의 가중치를 저장하는 dis 배열과 같이 동작하는 count배열을 추가하였다.이 count 배열은 dis 배열이 갱신될 때마다 중간에 얼마나 많은 정점들이 연결되는 지를 카운트하여 저장하는 배열이다. 예를들어1 - 2 를 연결하는 가중치를 나타내는 dis[1][2] 값이1 - 3 - 2로 갱신될 때 count[1][2]값이 count[1][3] + count[3][2] 값으로 갱신되는 것이다. 이렇게 모든 점에 대해서 플로이드 알고리즘을 한바퀴 돌고 나면, dis배열과 count배열이 갱신되게 되고각각의 count값을 i값에 대해 합을 낸 것을 구하면, 각 i 값에 따른 케빈 베이컨의 수가 나오게 된다. 정리하면, 배열 ..
2019.01.19 -
[BOJ_11403 | Floyd] 경로 찾기
풀이 플로이드 와샬 알고리즘을 이용해서 각 점의 경로 여부를 확인하면 간단하게 해결할 수 있는 문제였다.플로이드 와샬 알고리즘이란 그래프에서 모든 꼭짓점 사이의 최단 경로의 거리를 구하는 알고리즘으로, Kruscal, Prim알고리즘과는 달리 음수 가중치를 갖는 간선도 순환만 없다면 잘 처리할 수 있다는 장점이 있다. 하지만, 반복문을 3번 돌리기 때문에 O(n^3)의 시간복잡도를 가지므로 이 점은 유의해야 한다.3개의 반복문은 각각 다음과 같다. 첫 번째 - 거쳐가는 점두 번째 - 출발하는 점세 번째 - 도착하는 점 위 문제는 경로가 있는지 유무만 판단하는 것이므로 초기값을 100이상의 값으로 설정하고플로이드 와샬 알고리즘을 수행하여 거리를 저장한 배열의 값이 100 이상이면 경로가 없는 것으로 간주하..
2019.01.19 -
[BOJ_11586 | Array] 지영 공주님의 마법 거울
풀이 사실 문제 자체는 굉장히 간단했다.배열의 크기와 배열의 내용이 주어지면 그 내용을 입력받고공주님의 심리를 나타내는 control signal의 숫자에 따라 배열의 내용을 뒤바꾸기만 하면 되는 것이다. 문제 해결은 다음과 같이 이루어진다.1. 주어진 배열을 저장한다. (character Array)2. 주어진 심리 상태에 따라 배열을 각기 다른 방법으로 출력하면 된다. 심리상태가 1일 경우 입력받은 그대로 출력하면 되고2일 경우, 열의 번호를 역순으로 출력하면 되고3일 경우 행의 번호를 역순으로 출력하면 된다. 다만, 메인 함수 자체가 복잡해지는 것을 막기 위해 각각의 기능을 수행하는 static 함수를 새로 구현했고이 문제 상에서는 출력만 하면 되지만, 특정한 경우 반전된 데이터를 바탕으로 새로운 ..
2019.01.07