본문 바로가기

알고리즘77

[알고리즘] ACM Craft (백준 1005번) 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부� www.acmicpc.net 그래프 상으로 본인보다 앞서 있는 건물들이 모두 지어져야 해당 건물을 지을 수 있다는 설정을 보면 알 수 있듯이 위상 정렬을 쓰는 문제다. 다만 건물 건설 시간이 각각 다르다보니 기교를 가해야한다. 결론적으론 '위상정렬 + DP' 문제다. Solution 1. topologicalSort 함수 static int topologicalSort(int N, int W, int[] complete_time, ArrayList graph, int inEdge[].. 2020. 10. 5.
[알고리즘] 소수 구하기 (에라토스테네스의 체) 소수 소수 : 약수가 해당 숫자 본인과 1만 존재하는 수를 의미한다. (영어로는 Prime Number) EX) 2, 3, 5, 7 ..... (짝수 중에선 2가 유일한 소수이다.) 에라토스테네스의 체 모든 자연수는 단 하나의 소수들의 곱으로 표현된다는 특징을 이용하여 일정 범위의 수들이 소수인지 여부를 판단하는 방법이다. 즉, 소수의 곱이 되는 수는 소수가 아닌 것을 이용하여 소수가 아닌 수들을 걸러나가는 방법이다. 2가지 방법이 있는 데 순서의 차이일 뿐 어느 것을 써도 무방하다. 1. 소수 구한 후 결과 반전 boolean형 배열을 선언할 때는 초기값이 false로 채워져있기 때문에 우선 소수가 아닌 수들에 true를 해놓고 나중에 반전을 시키는 방법이다. int number = 10000; boo.. 2020. 10. 5.
[알고리즘] 외판원 순회 2 (백준 10971번) 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 외판원 순회, 일명 TSP라고 불리는 문제다. 외판원은 모든 도시를 최소 비용으로, 단 한 번 방문한 도시는 다시 방문할 수 없다는 조건 하에 순회하게 된다. (마지막 도시에서 출발 도시로 돌아오는 경우 제외) 도시를 방문하는 순서 케이스들을 찾아야 하기에 순열을 구하는 문제다. 이 경우는 N의 크기가 10 이하이기 때문에 백트랙킹으로 모든 경우를 찾을 수 있다. Solution 백트랙킹으로 순열을 구할 때와 조합을 구.. 2020. 10. 4.
[알고리즘] 가르침 (백준 1062번) 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 백트랙킹을 통한 완전탐색을 하는 문제다. 비트마스크와 배열 둘 중 하나를 이용해서 풀 수 있다. 2개의 메모리, 시간 효율 차이는 거의 없다. 그냥 똑같은 수준이다. Solution 공통적으로 행해야 할 것은 우선 가르칠 수 있는 단어가 5개 미만이면 어떤 글자도 읽을 수 없다. 만약 5개 이상이라면 남극언어의 기본 시작단어, 끝단어를 이루고 있는 알파벳들 'a c t n i' 5가지부터 추가시키고 시작한다. 1. boolean 배열로 가르침 여부 체크 .. 2020. 10. 3.