본문 바로가기

Algorithm

(117)
[백준] JAVA - 11399. ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net Java Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Numbe..
[백준] JAVA - 1261. 알고스팟 https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net Java Code package com.java.algorithm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenizer; public class B..
[백준] JAVA - 16953. A > B https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net Java Code package com.java.algorithm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class BOJ_16953_AB { public static void main(String[] args) throws IOException { BufferedReader br = ne..
[백준] JAVA - 14502. 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 생각 벽 3개를 완전탐색 3형제 중 조합을 통해 세워줬습니다. 벽 3개를 모두 세운 다음 각각의 경우마다 안전 영역의 크기가 최대값을 찾는 문제입니다. 벽을 세울때 재귀함수를 사용하여 현재위치에 벽을 세울 수 있다면 벽을 세워주고 그 다음 단계로 들어가 세울 수 있는 모든 경우를 탐색한뒤, 세웠던 벽을 원래대로 복구시켜줍니다. 벽을 모두 세운 다음 BFS를 사용하여 바이러스가 퍼지는 함수 spread를 만들었..
[백준] JAVA - 2636. 치즈 https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 생각 외부 영역과 맞닿아있는 치즈의 경계를 매초마다 지운다음 치즈가 모두 녹기 직전 치즈의 개수와 직전 시간을 구하는 문제입니다. 처음에 경계 치즈를 어떻게 구해줄까 생각하다가 내부에서 외부기준으로 판별하는게 어려워질껏같아 반대로 외부에서 내부를 BFS 탐색으로 체크해줬더니 경계를 체크할 수 있었습니다. 1. (0,0)부터 치즈가 없는 외부 영역 (map[y][x] = 0) 을 기준으로 BFS 탐색을 시작합니다. 이..
[백준] JAVA - 11727. 2×n 타일링 2 https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 생각 2*n 직사각형을 1*2, 2*1, 2*2 인 세가지 타일로 채우는 경우의 수를 구하는 문제입니다. 제가 정의한 dp[n] 은 너비가 n인 직사각형을 세가지의 타일로 채우는 경우의 수입니다. 타일의 경우가 세가지가 있는데 여기서 너비가 2인 타일이 두가지가 있기 때문에 dp[n] = dp[n-1] + dp[n-2] + dp[n-2]로 생각했습니다. 2*n 직사각형을 채우는 방법은 (1)n-1 너비인 직사각형에서 너비가 1..
[백준] JAVA - 11726. 2×n 타일링 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 생각 너비가 n이고 높이가 2인 직사각형을 1*2, 2*1 직사각형으로 채우는 경우의 수를 구하는 문제입니다. n이 1일땐 한가지 경우, n이 2일땐 너비가1인 직사각형을 두개 놓는 방법과 너비가 2인 직사각형을 두줄로 쌓는 경우로 두가지가 있습니다. 제가 정의한 dp[n]은 너비가 n일때 1*2, 2*1 타일로 채우는 경우의 수입니다. dp[n]일때 직사각형을 채울 수 있는 방법은 n-1 직사각형에서 너비가 1인 직..
[백준] JAVA - 1149.RGB거리 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 생각 N번째 집을 정해진 조건에 따라서 칠했을때 최소비용을 찾는 문제입니다. 처음에 dp를 1차원 배열로 설정하고 N개의 집을 색칠하는 최소비용을 계산하려다가 색칠하는 경우를 나눌수가 없어서 2차원 배열로 수정했습니다. 이때 집을 칠하는 경우는 총 세가지로 첫번째집을 빨간색으로 칠했다면 그 다음 집에 칠해야할 색은 조건에 따라 분기됩니다. 제가 정의한 dp는 dp[i][j] ..