목록Algorithm/BOJ (27)
in.add()
문제 링크 : https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 문제 해결 방법 bfs로 구현했다. 시뮬레이션 문제는 한 번에 통과하는 법이 없는 거 같다.. 더 꼼꼼히 확인해라! import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int N, R, L; static int[][] map; sta..
문제 링크 : https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 문제 해결 방법 오랜만에 크루스칼을 구현해봤다. import java.util.PriorityQueue; import java.util.Scanner; public class Main { static class Node implements Comparable { int from; int to; int cost; public Node(int fro..
문제 링크 : https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제 해결 방법 "ㅗ" 모양을 제외하고는 map 배열의 칸마다 dfs로 depth 4만큼 갔을 때의 경우를 검사하면 된다. dfs를 타고 들어갔을때 다른 모양은 존재하지 않음! "ㅗ" 모양은 checkT 함수에서 + 모양의 가운데를 중심으로 "ㅏ", "ㅜ", "ㅓ", "ㅗ" 순서대로 더해봐서 최댓값을 구한다. import java.util.Scanner; public class Ma..
문제 링크 : https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제 해결 방법 문제에서 주어진 대로 재귀로 시뮬레이션 구현했다. import java.util.Scanner; public class Main { static int N, M, r, c, d, count; static int[][] map; static int[] dr = {-1, 0, 1, 0}; static int[] dc = {0, 1, 0, -1}; public stati..
문제 링크 : https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 해결 방법 DP로 구현했다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] coin = new int[n]; for ..
문제 링크 : https://www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net 문제 해결 방법 벽 부수고 이동하기에서 K가 추가됐다. 벽 부수고 이동하기에서 visit 배열의 세 번째 값이 0 이면 벽을 안 부순 경우, 1 이면 벽을 부순 경우로 사용했다. 벽 부수고 이동하기 2에서는 visit 배열을 다음과 같이 boolean[][][] visited = new boolean[N][M][K + 1]; 선언하여 세번째 값으로..
문제 링크 : https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 문제 해결 방법 원형 큐와 비슷하게 작동하도록 구현했다. import java.util.Scanner; public class Main { static int N, K, left, right; static int[] belt; static boolean on[]; public static void main(String[] args) { Scanner sc = n..
문제 링크 : https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 문제 해결 방법 재귀로 트리 순회 구현했다. import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { static class Node { char data; char left; char right; public Node(char data, char lef..