본문 바로가기

알고리즘27

[백준] 자바 1922 네트워크 연결 문제 도현이는 컴퓨터와 컴퓨터를 모두 연결하는 네트워크를 구축하려 한다. 하지만 아쉽게도 허브가 있지 않아 컴퓨터와 컴퓨터를 직접 연결하여야 한다. 그런데 모두가 자료를 공유하기 위해서는 모든 컴퓨터가 연결이 되어 있어야 한다. (a와 b가 연결이 되어 있다는 말은 a에서 b로의 경로가 존재한다는 것을 의미한다. a에서 b를 연결하는 선이 있고, b와 c를 연결하는 선이 있으면 a와 c는 연결이 되어 있다.) 그런데 이왕이면 컴퓨터를 연결하는 비용을 최소로 하여야 컴퓨터를 연결하는 비용 외에 다른 곳에 돈을 더 쓸 수 있을 것이다. 이제 각 컴퓨터를 연결하는데 필요한 비용이 주어졌을 때 모든 컴퓨터를 연결하는데 필요한 최소비용을 출력하라. 모든 컴퓨터를 연결할 수 없는 경우는 없다. 입력 첫째 줄에 컴퓨.. 2022. 4. 26.
[백준] 자바 1074 Z 문제 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 22 × 22 크기의 배열을 방문한 순서이다. N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. 다음은 N=3일 때의 예이다. 입력 첫째 줄에 정수 N, r, c가 주어진다. 출력 r행 c열을 몇 번째로 방문했는지 출력한다. 테스트 케이스 입력 1 3 4 5 출력 1 49 입력 2 10 2 9 출력 2 73 입력 3 2 1 2 출력 3 6 접근 처음에는 모든 맵 처음부터.. 2022. 3. 4.
[알고리즘] 유니온-파인드 (자바) 유니온 파인드란? 말 그대로 union-find 알고리즘을 의미합니다.(주로 트리구조를 이용합니다.) 즉 집합-찾기 입니다. 같은 말로 disjoint-set이 있습니다. 사용 이유 1) 서로 다른 2개의 노드를 입력받아서 그 노드들을 합치거나, 2) find함수로 서로 다른 2개의 노드가 현재의 그래프에 속하는지 판별할 수 있습니다. 예제 코드 find 코드 public static int find(int x) { if( x == result[x]) { return x; } return result[x] = find(result[x]); } union 코드 public static void union(int x, int y) { x = find(x); y = find(y); if( x != y ) { .. 2021. 10. 19.
[알고리즘] 에라토스테네스의 체 에라토스테네스의 체란? 에라토스테네스가 만든 소수 판정방법으로, 쉽게 얘기해서 숫자들 중 소수를 체에 걸러서 찾아내는 방법입니다. 사용 이유 10까지의 소수는 그냥 찾기 쉽지만, 10000000까지의 소수는 찾기 쉽지 않다. 이럴 때 에라토스테네스의 체를 이용해서 효율적으로 소수를 찾아냅니다. 사용방법 특정한 수 n까지 소수를 구하고 싶다면, 2부터 n까지 2의 배수를 모두 제거한다...(자신인 2를 제외하고) 3부터 n까지 3의 배수를 모두 제거한다...(자신인 3을 제외하고) 4부터 n까지 4의 배수를 모두 제거한다....(자신인 4를 제외하고) .... ... n부터 n까지 n의 배수를 모두 제거한다.. (자신인 n은 제거하지 않으므로 아무것도 제거하지 않음) 모두 제거하고 남은 수가 소수입니다. .. 2021. 7. 31.
[백준] 자바 17608 막대기 문제 래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 보인다. N개의 막대기에 대한 높이 정보가 주어질 때, 오른쪽에서 보아서 몇 개가 보이는지를 알아내는 프로그램을 작성하려고 한다. 입력 첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 .. 2021. 6. 25.
[백준] 자바 1009 분산처리 문제 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터,... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1.. 2021. 3. 31.
반응형