정렬 15

백준(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) 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

백준(BOJ) 11399 : ATM (실버4) / 자바(Java) 풀이

문제https://www.acmicpc.net/problem/113993줄 요약입력받은 N개의 정수를 오름차순으로 정렬하여 배열 P에 저장합니다.배열 P를 이용하여 누적 합 배열 prefixSum을 계산합니다.누적 합 배열 prefixSum의 모든 원소를 더하여 총 대기 시간을 계산하고 출력합니다.코드// package boj11339;import java.io.*;import java.util.Arrays;import java.util.stream.Stream;public class Main { public static void main(String[] args) throws Exception { // 입력 파일로부터 데이터를 읽어오기 위해 파일 입력 스트림 설정 // S..

Problem_Solving 2024.04.30

프로그래머스 : 순위 검색 (자바, 파이썬)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설계 브루트 포스로 가능한 모든 조건의 조합을 생성하고, 이진 탐색을 통해 효율적으로 해당 조건을 만족하는 지원자 수를 찾아냄 각 info 문자열에 대해 가능한 모든 조건의 조합을 생성하고, 해당 조건에 해당하는 점수를 Map에 저장 Map의 각 값(점수 리스트)를 오름차순으로 정렬 각 query에 대해 해당 조건을 만족하는 점수의 개수를 찾기 위해 이진 탐색을 사용 이진 탐색을 통해 주어진 점수 조건을 만족하는 지원자의 수를 계산하여 결과 배열에 저장 구현 코드 자바(Java) // package pg724..

Problem_Solving 2024.01.25

백준(BOJ) 2512 : 예산 (자바, 파이썬)

2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 설계 이진 탐색(Binary Search)을 사용하여 예산 문제를 해결. 각 지방의 예산 요청을 받아 총 예산 범위 내에서 가능한 최대의 예산 상한액을 찾음. 예산의 최댓값을 초과하지 않는 범위에서 가능한 가장 큰 상한액을 찾아내는 것이 목표 탐색 범위를 절반씩 줄여나가면서 빠르게 최적의 해를 찾음 구현 코드 자바(Java) // package boj2512; import java.util.*; import java.io.*; public class Mai..

Problem_Solving 2024.01.24

백준(BOJ) 1181 : 단어 정렬 (자바, 파이썬)

1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 설계 주어진 단어들을 길이가 짧은 순으로, 길이가 같을 경우 사전 순으로 정렬 주어진 단어들을 HashSet을 사용하여 중복을 제거한 뒤, 배열로 변환 그 후, Arrays.sort 메소드와 람다식을 사용하여 단어들을 길이 순으로 정렬 길이가 같은 경우에는 사전 순으로 정렬 정렬된 단어들은 반복문을 통해 출력 구현 코드 자바(Java) // package boj1181; import java.util.*; import java.io.*; public ..

Problem_Solving 2024.01.20

백준(BOJ) 11650 : 좌표 정렬하기 (자바, 파이썬)

11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 설계 2차원 좌표를 입력받아 x좌표가 증가하는 순으로, x좌표가 같을 경우 y좌표가 증가하는 순으로 정렬 Arrays.sort 메소드와 람다식을 사용하여 좌표를 정렬 먼저 x좌표에 따라 정렬하고, x좌표가 같은 경우에는 y좌표에 따라 정렬 정렬된 좌표는 반복문을 통해 출력 구현 코드 자바(Java) // package boj11650; import java.util.Arrays; import java.util...

Problem_Solving 2024.01.19