BOJ 32

백준(BOJ) 9095 : 1, 2, 3 더하기 (실버3) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/90953줄 요약메모이제이션을 이용한 동적 계획법으로 1, 2, 3의 합으로 나타내는 방법의 수를 계산합니다.memo[i] = memo[i-3] + memo[i-2] + memo[i-1]의 점화식을 사용하여 계산합니다.각 테스트 케이스에 대해 계산된 결과를 출력합니다.코드// package boj9095;import java.io.*;import java.util.Arrays;public class Main { public static void main(String[] args) throws Exception { // 입력 파일에서 데이터 읽기 (테스트용) // System.setIn(new FileInputStr..

Problem_Solving 2024.05.04

백준(BOJ) 2512 : 예산 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/25123줄 요약지방의 수 N, 각 지방의 예산요청 A, 총 예산 M을 입력받습니다. 이분 탐색의 범위를 설정하기 위해 예산요청 중 최댓값에 1을 더해 상한값으로 사용합니다. 이는 모든 예산요청이 상한액과 같은 경우를 포함하기 위함입니다.이분 탐색을 사용하여 상한액을 조정해가며 총 예산이 M 이하가 되는 최대 상한액을 찾습니다. 이는 Upper Bound를 찾는 과정으로, 조건을 만족하는 최댓값을 찾습니다.Upper Bound로 찾은 값은 조건을 만족하는 최솟값보다 1 큰 값이므로, 최종 결과에서 1을 빼줍니다. 이렇게 얻은 값이 실제로 배정 가능한 최대 예산이 됩니다.코드// package boj2512;import java.io.*;impo..

Problem_Solving 2024.05.03

백준(BOJ) 1654 : 랜선 자르기 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/16543줄 요약K개의 랜선과 필요한 랜선의 개수 N을 입력받아, 각 랜선의 길이를 배열 A에 저장합니다. 랜선 길이의 최댓값이 2^31-1일 수 있으므로, s, e, mid를 비롯한 관련 변수들을 long 타입으로 선언하여 오버플로우를 방지합니다.이분 탐색을 사용하여 랜선을 자를 수 있는 최대 길이를 찾습니다. 중간 길이 mid로 랜선을 잘랐을 때 나오는 랜선의 개수를 long 타입의 result에 누적하여 N과 비교합니다. 이는 upper bound를 찾는 과정으로, 조건을 만족하는 최대 길이를 탐색합니다.최종적으로 이분 탐색이 종료되었을 때의 끝 길이 e가 최대 랜선 길이가 되며, 이를 출력합니다. Upper bound 탐색 결과로 얻은 ..

Problem_Solving 2024.05.02

백준(BOJ) 2805 : 나무 자르기 (실버2) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/28053줄 요약이분 탐색을 사용하여 시작 높이와 끝 높이를 조정해가며 최적의 높이를 찾습니다.Upper bound는 조건을 만족하는 가장 큰 값을 찾는 것으로, 이 문제에서는 적어도 M미터의 나무를 집에 가져갈 수 있는 절단기의 최대 높이를 의미합니다.잘린 나무의 길이를 누적하여 필요한 길이와 비교하며, 조건에 따라 탐색 범위를 좁혀나갑니다. 잘린 나무의 길이가 필요한 길이보다 크거나 같을 때 시작 높이를 증가시키고, 작을 때는 끝 높이를 감소시키는 방식으로 upper bound를 찾아갑니다.코드// package boj2805;import java.io.*;import java.util.stream.Stream;public class Mai..

Problem_Solving 2024.05.02

백준(BOJ) 1920 : 수 찾기 (실버4) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/19203줄 요약입력받은 배열 A를 정렬하고, 배열 B의 각 원소에 대해 이분 탐색을 수행합니다.이분 탐색이란 정렬된 배열에서 특정 값을 찾는 알고리즘으로, 배열의 중간 위치를 기준으로 찾고자 하는 값과 비교하여 왼쪽 또는 오른쪽 부분 배열을 선택하여 탐색 범위를 반씩 줄여나가는 방식으로 동작합니다.이분 탐색은 시간 복잡도 O(log N)으로, 선형 탐색의 O(N)보다 훨씬 빠르게 탐색을 수행할 수 있습니다.코드// package boj1920;import java.io.*;import java.util.Arrays;import java.util.stream.Stream;public class Main { public static void..

Problem_Solving 2024.05.02

백준(BOJ) 7785 : 회사에 있는 사람 (실버5) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/77853줄 요약출입 기록의 수 n을 입력받고, n개의 줄에 걸쳐 출입 기록을 읽어와서 "enter"인 경우 HashSet에 이름을 추가하고, "leave"인 경우 HashSet에서 이름을 제거합니다.HashSet에 저장된 현재 회사에 있는 사람들의 이름을 배열로 변환하고, 배열을 내림차순으로 정렬합니다.정렬된 배열의 이름을 한 줄에 한 명씩 출력하여 현재 회사에 있는 사람들의 이름을 사전의 역순으로 출력합니다.코드// package boj7785;import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Excepti..

Problem_Solving 2024.05.01

백준(BOJ) 17219 : 비밀번호 찾기 (실버4) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/172193줄 요약저장된 사이트 주소의 수 N과 비밀번호를 찾으려는 사이트 주소의 수 M을 입력받고, N개의 줄에 걸쳐 사이트 주소와 비밀번호를 입력받아 HashMap에 저장합니다.M개의 줄에 걸쳐 비밀번호를 찾으려는 사이트 주소를 입력받습니다.입력받은 사이트 주소를 이용하여 HashMap에서 해당 사이트 주소의 비밀번호를 찾아 출력합니다.코드// package boj17219;import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { // 입력 // 입력 파일로부터 데이터를 ..

Problem_Solving 2024.05.01

백준(BOJ) 1764 : 듣보잡 (실버4) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/17643줄 요약듣도 못한 사람의 수 N과 보도 못한 사람의 수 M을 입력받습니다.두 개의 HashSet을 사용하여 듣도 못한 사람의 명단과 보도 못한 사람의 명단을 저장하고, 두 HashSet의 교집합을 구하여 듣보잡의 명단을 생성합니다.듣보잡의 수와 명단을 사전순으로 정렬하여 출력합니다.코드// package boj1764;import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { // 입력 파일로부터 데이터를 읽어오기 위해 파일 입력 스트림 설정 // System.s..

Problem_Solving 2024.05.01

백준(BOJ) 1620 : 나는야 포켓몬 마스터 이다솜 (실버4) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/16203줄 요약포켓몬 도감에 수록된 포켓몬의 개수 N과 맞춰야 하는 문제의 개수 M을 입력받습니다.두 개의 HashMap을 사용하여 포켓몬 이름과 번호를 매핑하여 저장합니다.M개의 문제를 입력받아 해당하는 포켓몬의 번호 또는 이름을 찾아 출력합니다.코드// package boj1620;import java.io.*;import java.util.*;import java.util.stream.Stream;public class Main { public static void main(String[] args) throws Exception { // 입력 파일로부터 데이터를 읽어오기 위해 파일 입력 스트림 설정 // ..

Problem_Solving 2024.05.01

백준(BOJ) 1931 : 회의실 배정 (실버1) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/19313줄 요약회의 정보를 입력받아 2차원 배열에 저장합니다.회의 끝나는 시간을 기준으로 오름차순 정렬하고, 끝나는 시간이 같은 경우 시작 시간을 기준으로 오름차순 정렬합니다.이전 회의의 끝나는 시간보다 현재 회의의 시작 시간이 같거나 늦으면 선택하여 최대 회의 개수를 구합니다.코드// package boj1931;import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws Exception { // 입력 // System.setIn(new FileInputStream("src/input.txt")); Buffered..

Problem_Solving 2024.04.30