From 2ec239635b01e0858c85f0950baff8d983e0089d Mon Sep 17 00:00:00 2001 From: ShinyMint Date: Wed, 30 Aug 2023 00:02:13 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EB=B0=B1=EC=A4=80=2013305=EB=B2=88=20?= =?UTF-8?q?=EC=A3=BC=EC=9C=A0=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\243\274\354\234\240\354\206\214.java" | 111 ++++++++++++++++++ parkhayoon/temp.java | 4 - 2 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 "parkhayoon/BOJ_13305_\354\243\274\354\234\240\354\206\214.java" delete mode 100644 parkhayoon/temp.java diff --git "a/parkhayoon/BOJ_13305_\354\243\274\354\234\240\354\206\214.java" "b/parkhayoon/BOJ_13305_\354\243\274\354\234\240\354\206\214.java" new file mode 100644 index 0000000..fab5adf --- /dev/null +++ "b/parkhayoon/BOJ_13305_\354\243\274\354\234\240\354\206\214.java" @@ -0,0 +1,111 @@ +package algo.week01; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +/* + * 도시 N개 일직선 도로 + * 제일 왼쪽 -> 오른쪽 + * 도로 사이 길이가 다를 수 있음 + * + * 처음 출발 시 자동차 기름 없어서 주유소에서 기름 넣고 출발 + * 기름통 크기 무제한, 얼마든지 많은 기름을 넣을 수 있음 + * 1km당 1L 기름 사용 + * 각 도시에는 단 하나의 주유소 + * 주유소 마다 리터당 가격이 다를 수 있음 + * 이동 최소 비용 계산 + * + * 입력 + * 첫째 줄: 도시의 개수 N(2 ≤ N ≤ 100,000) + * 다음 줄: 인접한 두 도시를 연결하는 도로의 길이 N-1개 + * 다음 줄: 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수 + * 제일 왼쪽 도시부터 제일 오른쪽 도시까지의 거리는 1이상 1,000,000,000 이하의 자연수 + * 리터당 가격은 1 이상 1,000,000,000 이하의 자연수 + * + * 출력 + * 제일 왼쪽 도시에서 제일 오른쪽 도시로 가는 최소 비용 + * + * 아이디어 + * A(출발점) -> C(경유지 : A-B 사이에서 최솟값) -> B(도착점) + * 최솟값 = PriceA * Dist(C-A) + PriceC * Dist(B-C) + * 1) A-C 구간 : A-C 구간 최솟값 찾고 위 과정 반복 + * A-D-C 최솟값 = PriceA * Dist(D-A) + PriceD * Dist(C-D) 갱신 + * 2) C-B 구간 : 최소값 고정 + * + * 풀이 1) 배열로 최솟값 구하기 + * 풀이 2) 우선순위 큐로 최솟값 구하기 + * + */ +public class BOJ_13305_주유소 { + + static class Oil implements Comparable{ + int idx, price; + + public Oil(int idx, int price) { + super(); + this.idx = idx; + this.price = price; + } + + @Override + public int compareTo(Oil o) { + if(this.price != o.price) + return this.price > o.price ? 1 : -1; + else + return this.idx < o.idx ? 1 : -1; + } + + } + + static int N; // 도시의 개수 N + static int[] dist; // 누적 도로의 길이 목록 + static int[] price; // 리터 당 가격 목록 + static long sum; // 비용 저장 + static PriorityQueue pq = new PriorityQueue(); + + public static void main(String[] args) throws IOException { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + dist = new int[N]; + price = new int[N]; + + StringTokenizer st = new StringTokenizer(br.readLine()); + dist[0] = 0; // 0에서 0으로 가는 거리 = 0 + for(int i=1; i 도착점 비용 계산 + if(idx==0) return; // 경유지 = 시작점이면 종료 + int minIdx = 0; // 현재 최소 기름값 위치 이전의 최소 기름값 위치 갱신 + //for(int i=0; i Date: Wed, 30 Aug 2023 00:04:50 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EB=B0=B1=EC=A4=80=2011053=EB=B2=88=20?= =?UTF-8?q?=EA=B0=80=EC=9E=A5=20=EC=A6=9D=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=EC=88=98=EC=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\266\204\354\210\230\354\227\264.java" | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 "parkhayoon/BOJ_11053_\352\260\200\354\236\245\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\264.java" diff --git "a/parkhayoon/BOJ_11053_\352\260\200\354\236\245\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\264.java" "b/parkhayoon/BOJ_11053_\352\260\200\354\236\245\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\264.java" new file mode 100644 index 0000000..2e130bc --- /dev/null +++ "b/parkhayoon/BOJ_11053_\352\260\200\354\236\245\354\246\235\352\260\200\355\225\230\353\212\224\353\266\200\353\266\204\354\210\230\354\227\264.java" @@ -0,0 +1,42 @@ +package algo.week01; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class BOJ_11053_가장증가하는부분수열 { + + static int N; // 수열의 길이 N + static int[] arr; // 수열 + static int[] dp; // 선택한 부분 수열의 길이 저장 + + public static void main(String[] args) throws IOException { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + arr = new int[N]; + dp = new int[N]; + st = new StringTokenizer(br.readLine()); + for (int i=0; i Date: Wed, 30 Aug 2023 00:05:32 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=B0=B1=EC=A4=80=201931=EB=B2=88=20?= =?UTF-8?q?=ED=9A=8C=EC=9D=98=EC=8B=A4=20=EB=B0=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\213\244\353\260\260\354\240\225.java" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "parkhayoon/BOJ_1931_\355\232\214\354\235\230\354\213\244\353\260\260\354\240\225.java" diff --git "a/parkhayoon/BOJ_1931_\355\232\214\354\235\230\354\213\244\353\260\260\354\240\225.java" "b/parkhayoon/BOJ_1931_\355\232\214\354\235\230\354\213\244\353\260\260\354\240\225.java" new file mode 100644 index 0000000..ae79655 --- /dev/null +++ "b/parkhayoon/BOJ_1931_\355\232\214\354\235\230\354\213\244\353\260\260\354\240\225.java" @@ -0,0 +1,81 @@ +package algo.week01; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +/* + * 한개의 회의실에서 N개의 회의에 대하여 사용표 만들기 + * 각 회의 I에 대해 시작시간, 종료시간이 주어짐 + * 각 회의가 겹치지 않게 하면서 회의 사용 최대 개수 + * 회의는 중단 불가눙, 한 회의 종료 동시 다음 회의 시작 가능, 시작시간과 종료시간 동일할 수 있음 + * + * 입력 + * 첫째 줄: 회의의 수 N(1 ≤ N ≤ 100,000) + * 이후 N개 줄: 각 회의의 정보(시작시간, 종료시간)(0 ≤ 시간 ≤ 2^31 - 1) + * + * 출력 + * 각 회의가 겹치지 않게 하면서 회의 사용 최대 개수 + * + * 아이디어 + * 최대한 많은 회의를 골라야 함 + * 1) 무조건 제일 짧은 회의? - 가장 짧은 회의 선정이 최적 조건을 만족하진 않음 ex. 1-5, 6-10, 4-7 + * 2) 제일 빨리 끝나는 회의? - 시간 순서대로 지나감 -> 빨리 끝날수록 더 많은 회의 넣을 수 있음 + * + * 오류 발생 후 검색 + * 반례) + * 2 + * 4 4 + * 3 4 + * 2 4 + * 정답: 2, 출력: 1 + * => end뿐만 아니라 start도 정렬! + */ +public class BOJ_1931_회의실배정 { + + static class Time implements Comparable