본문 바로가기

Java128

[백준] 16234번 인구 이동 JAVA (자바) 풀이 문제 16234(BFS)  :  N×N크기의 땅    각 땅에는 나라가 하나씩 존재 ( r행 c열에 있는 나라에는 A[r][c]명이 산다)  :  인구 이동이 없을 때까지 지속된다.붙어있는 두 나라의 인구 차이가 L명 이상, R명 이하라면 인구 이동 시작인접한 칸만을 이용해 이동할 수 있으면 연합연합을 이루고 있는 각 칸의 인구수는 (연합의 인구수) / (연합을 이루고 있는 칸의 개수)편의상 소수점은 버린다연합을 해체하고 모든 국경선을 닫기 :  각 나라의 인구수가 주어졌을 때, 인구 이동이 며칠 동안 발생하는지 구하는 프로그램  [입력] :  첫째 줄에 N, L, R (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100)    둘째 줄부터 N개의 줄에 각 나라의 인구수    r행 c열에 주어지는 정수는 .. 2024. 7. 11.
[백준] 9205번 맥주 마시면서 걸어가기 JAVA (자바) 풀이 문제 9205(BFS)  :  출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발    맥주 한 박스에는 맥주가 20개     맥주 1병에 50미터 전진 가능    편의점에 들렸을 때, 빈 병은 버리고 새 맥주를 살 때 박스에 들어가는 총 맥주가 20병을 넘을 수 없다    (편의점을 나선 직후에도 50미터를 가기 전에 맥주 한 병을 마셔야 한다)    편의점, 상근이네 집, 펜타포트 락 페스티벌의 좌표가 주어진다  [입력] :  첫째 줄에 테스트 케이스의 개수 t (t ≤ 50)    테스트 케이스의 첫째 줄에는 편의점의 개수 n (0 ≤ n ≤ 100)    다음 n+2개 줄에는 상근이네 집, 편의점, 펜타포트 락 페스티벌 미터 좌표 ( -32768 ≤ x, y ≤ 32767)    두 좌표 사.. 2024. 7. 6.
[백준] 16928번 뱀과 사다리 게임 JAVA (자바) 풀이 문제 16928(BFS)  :  주사위를 조작해 원하는 수를 만들면 최소 몇 번만에 도착할까    게임은 크기가 10×10이고, 총 100개의 칸으로 된 보드판은 1~100까지 수가 적혀있다    주사위를 굴려 나온 수만큼 이동  :  예) 현위치 =  i  /  주사위 = 4라면 i+4번 칸으로 이동  :  도착칸 = 사다리 경우 위로 이동  /  도착칸 = 뱀 경우 뱀을 따라 이동    모든 칸은 최대 하나의 사다리 또는 뱀을 가지고 있다 (동시에 둘 다 갖는 경우는 없다)   :  게임의 목표 = 1번 칸에서 시작해서 100번 칸에 도착하는 것    100번 칸에 도착하기 위해 주사위를 굴려야 하는 횟수의 최솟값 구하기  [입력] :  첫째 줄에 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(.. 2024. 7. 3.
[백준] 13549번 숨바꼭질 3 JAVA (자바) 풀이 문제 13549(BFS)  :  수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다     현 위치가 X일 때    걷기 = 1초 후에 X-1 또는 X+1로 이동    순간이동 =  0초 후에 2*X의 위치로 이동    수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구해라  [입력] :  첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K  [출력] :  동생을 찾는 가장 빠른 시간을 출력    [문제접근] 1. 기존 숨바꼭질 1697번과 차이점!기존 문제에서는 모든 이동이 동일한 1초를 소요현 문제에서는 순간 이동은 0초 / 걷기 이동만 1초 소요 2. 출력 배열 사용하지 말고 큐에다 넣어버리기count[] 배열보다 .. 2024. 7. 3.
[백준] 11048번 이동하기 JAVA (자바) 풀이 문제 11048번 (DP) :  N×M 크기의 미로    1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다    현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다    (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동 가능, 각 방의 사탕 획득 가능    (N, M)으로 이동할 때, 가져올 수 있는 사탕 개수의 최댓값  [입력] :  첫째 줄에 미로의 크기 N, M (1 ≤ N, M ≤ 1,000)    둘째 줄부터 N개 줄에는 총 M개의 숫자가 주어지며 각각의 사탕의 개수 ( 0 ≤ 사탕 ≤ 100 )  [출력]  :  가져올 수 있는 사탕 개수를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지.. 2024. 7. 2.
[백준] 9184번 신나는 함수 실행 JAVA (자바) 풀이 문제 9184번 (DP) :  재귀함수 w(a, b, c)가 있다if a 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20)if a   a, b, c가 주어졌을 때, w(a, b, c)를 출력하는 프로그램   otherwise w(2a-2, 2b, c) 출력력  [입력] :  입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다    (입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다)  [출력]  :   w(a, b, c)를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  .. 2024. 7. 2.
[백준] 11722번 가장 긴 감소하는 부분 수열 JAVA (자바) 풀이 문제 11722번 (DP) :  수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램     예) 수열 A의 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} , 길이 3  [입력] :  첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)    둘째 줄에는 수열 A를 이루고 있는 Ai (1 ≤ Ai ≤ 1,000)  [출력]  :  첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀.. 2024. 7. 1.
[백준] 11051번 이항 계수 2 JAVA (자바) 풀이 문제 11051번 (DP, 수학) : 자연수 N과 정수 K가 주어졌을 때 이항 계수 (𝑁𝐾)를 10,007로 나눈 나머지를 구해라  [입력] :  첫째 줄에  N과 K가 주어진다. (1 ≤ N  ≤ 1,000, 0 ≤ K ≤ N)  [출력]  :  (𝑁𝐾)를 10,007로 나눈 나머지  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top-Down) 보텀업 (Bottom-Up)작은 크기로 문제를 나눠서 해결작은 것부터 해결해서 점차 빌드업메모제이션 (memoization)타뷸레이션 (tabulation)일부만 계산.. 2024. 7. 1.
[백준] 1699번 제곱수의 합 JAVA (자바) 풀이 문제 1699번 (DP) : 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다   예를 들어 11 = 3² + 1² + 1² (3개 항) 또는 11 = 2² + 2² + 1² + 1² + 1² (5개 항) 가능하다   11 제곱수 항의 최소 개수는 3이다   주어진 자연수 N 제곱수 항의 최소개수를 구하는 프로그램  [입력] :  첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000)   [출력]  :   제곱수 항의 최소 개수를 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법  DP 구현 방법은 일반적으로 Top-down(하향식)과 Bottom-up(상향식)으로 구성된다 탑다운 (Top.. 2024. 7. 1.
[백준] 11055번 가장 큰 증가하는 부분 수열 JAVA (자바) 풀이 문제 11055번 (DP) :  수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구해라    예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는    부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113  [입력] :  첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)    둘째 줄에는 수열 A를 이루고 있는 Ai (1 ≤ Ai ≤ 1,000)  [출력]  :  수열 A의 합이 가장 큰 증가하는 부분 수열의 합을 출력  [설명] DP 알고리즘: 이미 계산된 결과는 별도의 메모리 영역에 저장하여 다시 계산하지 않음으로서 수행 시간 단축시키는 방법 .. 2024. 7. 1.