본문 바로가기

프로그래밍_백준/Java

(11)
*Java) 2579번 계단 오르기 (dp) 이 문제의 핵심은 두 가지 경우의 수를 생각하는 것입니다. 바로 직전 계단을 밟지 않고 이전 계단과 현재 계단을 밟는 경우: (2칸) DP[i - 2]​ 바로 직전 계단을 밟고 현재 계단을 밟는 경우: (i-3에서 2칸을 올라오고 i-1에서 한 칸을 올라옴) DP[i - 3] + arr[i - 1]) + arr[i]​ DP[i-3]이 1칸+1칸으로 올라오는 경우가 있기 때문에 2칸을 올라간다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); // 계단의 개수 입력 int[] DP = new in..
Java) 1463번 1로 만들기 (dp) 이 문제는 dp를 사용하는 문제입니다. N부터 시작하여 1까지 내려가는 과정에서 숫자를 만드는데 필요한 횟수를 메모제이션 합니다. 1. 1을 빼는 경우를 계산 2. 2로 나누어 떨어지는 경우 1을 뺀 경우와 비교하여 더 작은 값을 찾음. 3. 으로 떨어지는 경우 1을 뺀 경우와 비교하여 더 작은 값을 찾음. 각각에서 +1을 하는 경우는 1을 뺀 경우, 2로 나눈 경우, 3으로 나눈 경우를 더해주는 것 입니다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] dp = new int[n+..
Java) 백준 1003번 피보나치 함수 (DP) 피보나치 함수를 이용하여 0과 1의 사용빈도를 출력하는 문제입니다. 이 문제는 다이나믹 프로그래밍을 사용해야 합니다! 재귀 Top-Down Bottom-Up 1. 재귀 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; public class Main { static int count_0 = 0; static int count_1 = 0; public static void main(String[] args) throws IOException { BufferedReader br..
Java) 백준 1874 스택 수열 프로그램 로직 사용자로부터 수열의 크기(n)를 입력. 수열의 각 요소를 입력받아 배열(arr)에 저장. 배열의 각 요소에 대해 다음을 수행: 스택이 비어 있거나, 스택의 맨 위 요소가 현재 배열 요소보다 작으면, 스택에 새로운 값을 '푸시'(+ 연산). 스택의 맨 위 요소가 현재 배열 요소와 같으면, 스택에서 값을 '팝'(- 연산). 스택의 맨 위 요소가 현재 배열 요소보다 크면, 수열을 재구성할 수 없으므로 "NO"를 출력하고 프로그램을 종료. import java.util.ArrayList; import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner..
*Java) 백준 1966번 프린터 큐 1966번 문제입니다. 프린터가 여러 문서를 어떤 순서로 출력하는지를 알아내는 문제입니다. 만약 중요도가 같은 문서가 여러 개 있다면, 입력된 순서대로 출력됩니다. 여기서 3번째 케이스를 계속 헷깔렸어요.. 이렇게 생각하면 편하더라구요! '1' 1 9 1 1 1 9 > 1 > 1 > 1 > '1' > 1 따라서 5입니다! 저는 입력한 순서라고 해서 9 > '1' > 1 > 1 > 1 > 1 이런 줄 알았어요.. PriorityQueue 원소를 중요도 순서로 정렬합니다. 단 PriorityQueue는 입력 순서를 보장하지 않습니다. 따라서 Queue를 사용하여 문서의 순서를 유지합니다. Document 클래스 생성 Document 클래스를 통해 우선 순위와 인덱스 값을 저장합니다. 이렇게 하면 찾으려는 인..
Java) 1764 듣보잡 이 문제는 듣도 못한 사람, 보도 못한 사람의 명단을 따로 입력 받고 두 명단에서 겹치는 사람 인원과 이름을 출력하는 문제입니다. 1. 두 명단을 입력을 받아 배열에 저장합니다. 2. HashSet을 이용하여 교집합을 찾습니다. 3. 이를 정렬하여 출력합니다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 스캐너 객체 생성 int n, k; n = sc.nextInt(); // 듣도 못한 사람의 수 입력 받음 k = sc.nextInt(); // 보도 못한 사람의 수 입력 받음 sc.nextLine(); // 개행문자 제거 String[..
Java) 10814 나이순 정렬 (2차원 배열 정렬) 입력할 사람의 수를 입력하고 나이순, 먼저 입력한 순으로 정렬하여 출력하는 문제입니다. 2차원 배열을 이용해면 쉽게 풀 수 있습니다. Arrays.sort(age_name,(a,b)->Integer.compare(Integer.parseInt(a[0]),Integer.parseInt(b[0]))); /* Arrays.sort 메서드를 이용해 나이 순으로 정렬. 여기서 람다 표현식 (a,b)->Integer.compare(Integer.parseInt(a[0]),Integer.parseInt(b[0]))가 사용되었는데, 이는 a와 b 두 개의 문자열 배열을 받아, 각각 첫 번째 요소인 '나이'를 Integer로 변환한 후 비교하는 것을 의미합니다. 결과적으로 오름차순 정렬됩니다.*/ import java...
Java) 7568번 덩치 백준 덩치 문제는 덩치 등수를 측정하는 문제입니다. 자신보다 몸무게, 키가 크면 rank를 증가시키고 이를 출력하는 구조로 구현하였습니다. import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc= new Scanner(System.in); // 스캐너 객체 생성 int N; // 사람의 수를 저장할 변수 N 선언 N=sc.nextInt(); // 사용자로부터 사람의 수를 입력받음 int [][] weight_height=new int[N][2]; // 사람의 수에 맞게 2차원 배열 생성. 각 행은 개개인을, 열은 그 사람의 몸무게와 키를 나타냄 for (int i=0;i

728x90