diff --git a/Baekjoon/dj1087/B2470.java b/Baekjoon/dj1087/B2470.java index b09ba04..43b7092 100644 --- a/Baekjoon/dj1087/B2470.java +++ b/Baekjoon/dj1087/B2470.java @@ -1,4 +1,61 @@ package Baekjoon.dj1087; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.StringJoiner; +import java.util.StringTokenizer; + public class B2470 { + + public int[] solveByTwoPointer(ArrayList densityList) { + densityList.sort(Integer::compareTo); +// System.out.println(densityList); + int leftIndex = 0; + int rightIndex = densityList.size() - 1; + int[] answer = new int[]{-1, -1, Integer.MAX_VALUE}; + while (leftIndex < rightIndex) { +// System.out.println(densityList.get(leftIndex) + "|" + densityList.get(rightIndex)); + int mixedDensity = densityList.get(leftIndex) + densityList.get(rightIndex); +// System.out.println(Math.abs(mixedDensity) + "|" + answer[2] +// + "|" + (Math.abs(mixedDensity) < answer[2])); + if (Math.abs(mixedDensity) < answer[2]) { + answer = new int[]{leftIndex, rightIndex, Math.abs(mixedDensity)}; + } + + if (mixedDensity > 0) { + rightIndex--; + } else if (mixedDensity < 0) { + leftIndex++; + } else { + answer = new int[]{leftIndex, rightIndex, 0}; + break; + } + } + return answer; + } + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + ArrayList densityList = new ArrayList<>(); + while (st.hasMoreTokens()) { + int density = Integer.parseInt(st.nextToken()); + densityList.add(density); + } + + B2470 problem = new B2470(); + + int[] answer = problem.solveByTwoPointer(densityList); + StringJoiner joiner = new StringJoiner(" "); + + joiner.add(String.valueOf(densityList.get(answer[0]))) + .add(String.valueOf(densityList.get(answer[1]))); + System.out.println(joiner); + br.close(); + } } diff --git a/Programmers/dj1087/P148653.java b/Programmers/dj1087/P148653.java new file mode 100644 index 0000000..fc3b8f1 --- /dev/null +++ b/Programmers/dj1087/P148653.java @@ -0,0 +1,21 @@ +package Programmers.dj1087; + +public class P148653 { + public int dfs(int step, int count) { + if (step == 0) { + return count; + } + int floor = step % 10; + if (floor > 5) { + return dfs((step / 10) + 1, count + (10 - floor)); + } else if (floor < 5) { + return dfs(step / 10, count + floor); + } else { + return Math.min(dfs(step / 10, count + floor), dfs((step / 10) + 1, count + (10 - floor))); + } + } + + public int solution(int storey) { + return dfs(storey, 0); + } +} diff --git a/Programmers/dj1087/P150370.java b/Programmers/dj1087/P150370.java new file mode 100644 index 0000000..10c98b7 --- /dev/null +++ b/Programmers/dj1087/P150370.java @@ -0,0 +1,61 @@ +package Programmers.dj1087; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +class Privacy { + LocalDate start; + String type; + + public Privacy(String s) throws ParseException { + String[] array = s.split(" "); + + this.start = parseDate(array[0]); + this.type = array[1]; + } + + public static LocalDate parseDate(String dateString) throws ParseException { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.parse(dateString).toInstant().atZone(ZoneId.of("Asia/Seoul")).toLocalDate(); + } + + public boolean isDestroy(LocalDate today, Map termMap) { + LocalDate destroyDate = this.start.plusMonths(termMap.get(this.type)); + return !today.isBefore(destroyDate); + } +} + +public class P150370 { + public int[] solution(String today, String[] terms, String[] privacies) throws ParseException { + ArrayList answer = new ArrayList<>(); + LocalDate todayDate = Privacy.parseDate(today); + Map termMap = new HashMap<>(); + for (String each : terms) { + String[] info = each.split(" "); + termMap.put(info[0], Integer.parseInt(info[1])); + } + + for (int i = 0; i < privacies.length; i++) { + Privacy privacy = new Privacy(privacies[i]); + if (privacy.isDestroy(todayDate, termMap)) { + answer.add(i + 1); + } + } + return answer.stream().mapToInt(Integer::intValue).toArray(); + } + + public static void main(String[] args) throws ParseException { + P150370 p = new P150370(); + p.solution("2022.05.19", new String[]{"A 6", "B 12", "C 3"}, new String[]{"2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"}); + p.solution("2020.01.01", new String[]{"Z 3", "D 5"}, new String[]{"2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"}); + + Privacy p1 = new Privacy("2021.05.02 A"); + + } + +} diff --git a/Programmers/dj1087/P161990.java b/Programmers/dj1087/P161990.java new file mode 100644 index 0000000..a829c53 --- /dev/null +++ b/Programmers/dj1087/P161990.java @@ -0,0 +1,31 @@ +package Programmers.dj1087; + +public class P161990 { + public void updateDragPoints(int[] answer, int row, int col) { + if (row < answer[0]) { + answer[0] = row; + } + if (col < answer[1]) { + answer[1] = col; + } + if (row + 1 > answer[2]) { + answer[2] = row + 1; + } + if (col + 1 > answer[3]) { + answer[3] = col + 1; + } + } + + public int[] solution(String[] wallpaper) { + int[] answer = {wallpaper.length + 1, wallpaper[0].length() + 1, 0, 0}; + for (int row = 0; row < wallpaper.length; row++) { + for (int col = 0; col < wallpaper[row].length(); col++) { + if (wallpaper[row].charAt(col) == '#') { + updateDragPoints(answer, row, col); + } + } + } + + return answer; + } +}