From 7768bd5fea248dd2256914253cf8326639d4b018 Mon Sep 17 00:00:00 2001 From: Delf-Lee Date: Fri, 13 Nov 2020 21:50:56 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Update=20programmers=2043105:=20=EC=A0=95?= =?UTF-8?q?=EC=88=98=20=EC=82=BC=EA=B0=81=ED=98=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/delf/programmers/Solution43105.java | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/delf/programmers/Solution43105.java diff --git a/src/delf/programmers/Solution43105.java b/src/delf/programmers/Solution43105.java new file mode 100644 index 0000000..11fd511 --- /dev/null +++ b/src/delf/programmers/Solution43105.java @@ -0,0 +1,29 @@ +package programmers; + +/** + * 정수 삼각형 + * https://programmers.co.kr/learn/courses/30/lessons/43105 + */ +public class Solution43105 { + + public static void main(String[] args) { + System.out.println(new Solution43105().solution(new int[][]{{7}, {3, 8}, {8, 1, 0}, {2, 7, 4, 4}, {4, 5, 2, 6, 5}})); + } + + public int solution(int[][] triangle) { + int answer; + int n = triangle.length; + int[][] dp = new int[n][n]; + + System.arraycopy(triangle[n - 1], 0, dp[n - 1], 0, n); + + for (int i = n - 2; i >= 0; i--) { + for (int j = 0; j < i + 1; j++) { + dp[i][j] = Math.max(dp[i + 1][j], dp[i + 1][j + 1]) + triangle[i][j]; + } + } + answer = dp[0][0]; + + return answer; + } +} From 5ce5c999a8b7576f26cc4fe1b69f562be2106f9d Mon Sep 17 00:00:00 2001 From: Delf-Lee Date: Sat, 14 Nov 2020 04:28:10 +0900 Subject: [PATCH 2/3] Update line3 --- src/delf/etc/ln/Ln03.java | 86 ++++++++++++++++++++++++ src/delf/etc/{NV01.java => ln/Ln06.java} | 10 +-- 2 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 src/delf/etc/ln/Ln03.java rename src/delf/etc/{NV01.java => ln/Ln06.java} (95%) diff --git a/src/delf/etc/ln/Ln03.java b/src/delf/etc/ln/Ln03.java new file mode 100644 index 0000000..bcf16a0 --- /dev/null +++ b/src/delf/etc/ln/Ln03.java @@ -0,0 +1,86 @@ +package etc.ln; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author delf + */ +public class Ln03 { + public static void main(String[] args) { + System.out.println(new Ln03().solution("1110111100001111101111110000011111", 3)); + System.out.println(new Ln03().solution("001100", 5)); + + } + + public int solution(String road, int n) { + List list = new ArrayList<>(); + char[] arr = road.toCharArray(); + boolean isContinue = true; + int start = 0; + for (int i = 0; i < road.length(); i++) { + if (isContinue) { + if (i == road.length() - 1 || arr[i + 1] == '0') { + list.add(new Interval(start, i)); + isContinue = false; + } + continue; + } + if (arr[i] == '1') { + start = i; + isContinue = true; + } + } + + int max = 0; + int startInterval = 0; + do { + int sum = 0; + int empty = 0; + for (int i = startInterval; i < list.size() - 1; i++) { + Interval tmp = list.get(i); + sum += tmp.getLength(); + if ((empty += tmp.getDiff(list.get(i + 1))) > n) { + break; + } + } + max = Math.max(sum + n, max); + } while (startInterval++ < list.size()); + + return max; + } + + class Interval { + private int start; + private int end; + private int length; + + public Interval(int start, int end) { + this.start = start; + this.end = end; + length = end - start + 1; + } + + public boolean isLonger(Interval interval) { + return this.length > interval.length; + } + + + @Override + public String toString() { + return "Interval{" + + "start=" + start + + ", end=" + end + + ", length=" + length + + '}'; + } + + public int getLength() { + return length; + } + + public int getDiff(Interval interval) { + return interval.start - this.end - 1; + } + } +} diff --git a/src/delf/etc/NV01.java b/src/delf/etc/ln/Ln06.java similarity index 95% rename from src/delf/etc/NV01.java rename to src/delf/etc/ln/Ln06.java index 7e34dc9..2b0ea6b 100644 --- a/src/delf/etc/NV01.java +++ b/src/delf/etc/ln/Ln06.java @@ -1,21 +1,21 @@ -package etc; +package etc.ln; import java.util.*; -public class NV01 { +public class Ln06 { public static void main(String[] args) throws CloneNotSupportedException { - System.out.println(Arrays.toString(new NV01().solution( + System.out.println(Arrays.toString(new Ln06().solution( new String[]{"/", "/hello", "/hello/tmp", "/root", "/root/abcd", "/root/abcd/etc", "/root/abcd/hello"}, new String[]{"mkdir /root/tmp", "cp /hello /root/tmp", "rm /hello"})) ); - System.out.println(Arrays.toString(new NV01().solution( + System.out.println(Arrays.toString(new Ln06().solution( new String[]{"/"}, new String[]{"mkdir /a", "mkdir /a/b", "mkdir /a/b/c", "cp /a/b /", "rm /a/b/c"})) ); - System.out.println(Arrays.toString(new NV01().solution( + System.out.println(Arrays.toString(new Ln06().solution( new String[]{"/"}, new String[]{"mkdir /a", "mkdir /a/b", "mkdir /a/b/c", "cp /a/b /", "rm /a/b/c"})) ); From 735d0abd402326658ad5e937aa34d0f982d5130e Mon Sep 17 00:00:00 2001 From: Delf-Lee Date: Sat, 14 Nov 2020 20:11:30 +0900 Subject: [PATCH 3/3] Update line3 --- src/delf/etc/ln/Ln03.java | 56 +++++++++++++++------------------------ 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/src/delf/etc/ln/Ln03.java b/src/delf/etc/ln/Ln03.java index bcf16a0..41e9a38 100644 --- a/src/delf/etc/ln/Ln03.java +++ b/src/delf/etc/ln/Ln03.java @@ -14,46 +14,48 @@ public static void main(String[] args) { } public int solution(String road, int n) { + /* array로 표현된 road를 Interval의 List로 변환 */ List list = new ArrayList<>(); char[] arr = road.toCharArray(); boolean isContinue = true; int start = 0; for (int i = 0; i < road.length(); i++) { - if (isContinue) { - if (i == road.length() - 1 || arr[i + 1] == '0') { - list.add(new Interval(start, i)); + if (isContinue) { // 정상적인 도로였는데, + if (i == road.length() - 1 || arr[i + 1] == '0') { // 끊기면 + list.add(new Interval(start, i)); // 거기까지가 새 구간 isContinue = false; } continue; } - if (arr[i] == '1') { - start = i; + if (arr[i] == '1') { // 처음 정상도로를 만나면, + start = i; // 기록 isContinue = true; } } - int max = 0; - int startInterval = 0; + int maxLength = 0; + int startIntervalIdx = 0; do { - int sum = 0; - int empty = 0; - for (int i = startInterval; i < list.size() - 1; i++) { - Interval tmp = list.get(i); - sum += tmp.getLength(); - if ((empty += tmp.getDiff(list.get(i + 1))) > n) { + int tmpTotal = 0; + int brokenRoad = 0; + for (int i = startIntervalIdx; i < list.size() - 1; i++) { // 시작 구간을 하나씩 옮겨가면서 완성된 구간의 길이 중 최댓값 기록 + Interval interval = list.get(i); + tmpTotal += interval.getLength(); + if ((brokenRoad += interval.getMinimumDistanceTo(list.get(i + 1))) > n) { // 망가진 구간을 메워서 다음까지 연결 시킬 수 있는지 여부 break; } } - max = Math.max(sum + n, max); - } while (startInterval++ < list.size()); + maxLength = Math.max(tmpTotal + n, maxLength); // 이번 루프에서 구간의 총 길이 + } while (startIntervalIdx++ < list.size()); - return max; + return maxLength; } + // 정상도로 구간 class Interval { - private int start; - private int end; - private int length; + private int start; // 정상적인 road가 시작되는 위차 + private int end; // 정상적인 road가 끝나는 위치 + private int length; // 구간의 길이 public Interval(int start, int end) { this.start = start; @@ -61,25 +63,11 @@ public Interval(int start, int end) { length = end - start + 1; } - public boolean isLonger(Interval interval) { - return this.length > interval.length; - } - - - @Override - public String toString() { - return "Interval{" + - "start=" + start + - ", end=" + end + - ", length=" + length + - '}'; - } - public int getLength() { return length; } - public int getDiff(Interval interval) { + public int getMinimumDistanceTo(Interval interval) { return interval.start - this.end - 1; } }