본문 바로가기

algorithm51

[백준] 16637.괄호 추가하기 (java) / DFS, 백트래킹, 조합, 시뮬레이션 @DFS, 백트래킹, 조합, 시뮬레이션 / 3h 이상 간단한 문제라고 생각했는데, 조합에서 한번 헤매고, 계산하는 곳에서 한번 더 헤매서 처음 맞았을때는 도대체 왜 맞는지도 이해가 안됐었다. 재귀를 이용한 DFS 백트래킹 조합을 공부하는 기회가 됐다. 구현 방법 DFS, 백트래킹을 이용한 조합 구현 1. 괄호를 놓을 수 있는 곳은 3+ 8* 7- 9*2 이 네 곳(== 배열크기 N / 2)이다. 그런데 빨간 칸에 연속해서 괄호를 배치할 수는 없으므로, 괄호 개수를 0부터 - 가능한 최대 개수 까지 놓되, 인접한(붙어있는) 칸은 뽑지 않는 조합을 구하기로 했다. 2. 그런데 이 조합을 구하는게 생각보다 너무 어려워서, 결국 실패하고 도움을 받았는데, 바로 이 방법이다. (더 나은 방법은 4번 참고) 1) .. 2020. 2. 10.
[백준] 15684.사다리 조작 (java) / DFS, 백트래킹 @DFS, 백트래킹 / 3h 예전에 풀었던 문제인데, 처음 풀 때는 진짜 잘 풀었었는데 이번에는 2시간 넘도록 통과도 못했다..ㅠㅠ 계속 틀렸습니다 뜨고 ㅎㅎ 실력이 퇴보한건가.. 결국 예전 코드 + 다른 코드를 참고해서 다시 짰다. 문제 링크 https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선이 같은 위치를 갖는다. 아래 그림은 N = 5, H = 6 인 경우의 그림이고, 가로선은 없다. 초록선은 세로선을 나타내고, 초록선과 점선이 교차하는 점은 가로선을 놓을 수 있는 점.. 2020. 2. 3.
[백준] 1647.도시분할계획 (java) / 크루스칼, Union-Find @크루스칼, Union-Find / 51m 시간이 계속 터져서, 15분정도 고쳤다. 쉬운 문제인데 너무 어렵게 생각해서 좀 돌아갔다. 문제 링크 https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수N, 길의 개수M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 집과 B번 집을 연결하는 길의 유지비가 C (1 ≤ C ≤ 1,000)라는 뜻이다. www.acmicpc.net 구현 포인트 처음에는 배열에 값을 받고, Arrays.sort()로 정렬했는데 우선순위 큐로 다시 풀어보니 시간이 1초 이상 줄었다. (.. 2020. 2. 2.
다익스트라 vs 크루스칼 비교 (java) 다익스트라 크루스칼 구현 방법 우선순위 큐 + dist(점화식) 우선순위 큐 + Union-Find 중심 정점 중심 간선 중심 시작점 출발점이 정해져 있는 경우 간선의 가중치가 가장 작은 것부터 시작한다 큐에 넣는 시점 dist가 갱신 될 때에만 그 점에서 출발하는 간선을 우선순위 큐에 넣어준다. 모든 정점을 우선순위 큐에 넣고 시작한다 용도 점과 점 사이의 거리를 구할 경우 최소 신장 트리를 그릴 때 끝 점과 점 사이의 최단 거리를 찾고 나면, 더이상 탐색하지 않는다. 목적에 따라 끝까지 그릴 수도 있다. 최소 신장 트리가 만들어 질 때까지(모든 점들이 다 이어질 때 까지) 탐색한다. 두 덩이일 경우 한 덩이만 그려지고 다른 한덩이는 그려지지 않는다(이어져 있지 않기 때문에) 간선 중심이므로 끝까지 가.. 2020. 2. 1.
[백준] 17472.다리 만들기 2 (java) / 크루스칼, Union-Find, DFS, BFS, 시뮬레이션 @ 크루스칼, Union-Find, DFS, BFS, 시뮬레이션 / 1h 30m 9월 삼성 SW 역량테스트 2번 문제 종이에 쓰는시간 30분을 포함해서 1시간만에 풀었는데 몇가지 실수해서 디버깅하느라 +30분 걸렸다. 다익스트라, DFS 등 여러 개념을 이용해서 풀 수 있는 좋은 문제인 것 같다. 약간 어려운 편. 문제 링크 https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 구현 방법 1. 먼저 각 섬들에 단지번호붙이기 방법.. 2020. 2. 1.