본문 바로가기

DP8

[프로그래머스] 리코쳇 로봇 Java 풀이 개인적으로 좋았던 문제 bfs+dp를 정석으로 사용할 수 있다. 알고리즘을 풀 때 map과 방향이 나오면 dir_x, dir_y는 무조건 사용해 주는게 좋다. 아래 코드에서는 n = board.length, m = board[0].length() 이런식으로 빼주면 더 깔끔해질듯 bfs를 활용한 탐색을 할 때 주의해야 하는 점 1. visited 사용 2. map을 벗어나지 않게 조건 (x >= 0 && x = 0 && y < board[0].length()) 여기까지는 dp+bfs 기본이고 문제에 맞게 조건을 더 추가해주면 된다. import java.util.LinkedList; import java.util.Queue; public class Main { publ.. 2023. 5. 25.
[백준] 15681 트리와 쿼리 풀이 Java 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net 문제 간선에 가중치와 방향성이 없는 임의의 루트 있는 트리가 주어졌을 때, 아래의 쿼리에 답해보도록 하자. 정점 U를 루트로 하는 서브트리에 속한 정점의 수를 출력한다. (*) 메모리 제한 : 128MB (*) 백준 문제 하단에 Tree에 대한 간단한 설명이 있으니 읽어보면 좋음 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q .. 2022. 7. 15.
[백준] 1463 1로 만들기 풀이 Java 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net DP 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 풀이 제출 했을 때 100%에서 틀렸다고 떠서 뭘 잘못했나 했더니 1일때 답은 0이라는 것을 놓쳤었다. 아래 코드를 보면 조건만 맞는다면 i-1, i%3, i%2에 대해서 모두 검사하게 되어있다. 그 이유는 아래와 같이 n=10 일 때, 다양하게 갈라질 수 있기 때문에 가장.. 2022. 7. 14.
[백준] 9095 1,2,3 더하기 풀이 Java 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 풀이 1,2,3 을 사용하기 때문에 dp[n] = func(n-1)+func(n-2)+func(n-3) 이다. dp 배열은 계속해서 재사용 가능하게 하는데 n은 11보다 작기 때문에 배열의 크기는 11로 선언한다. 함수 내부에서 n보다 작은 경우는 return 0으로.. 2022. 7. 14.
[백준] 2579 계단 오르기 풀이 Java 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 아래와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다... 2022. 7. 14.
[백준] 11726 2×n 타일링 풀이 Java 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net DP 문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 풀이 import java.util.Scanner; public class Main { static int[] dp; public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); dp =.. 2022. 7. 13.
반응형