From 76a6a87edd4f0608af59b079ca7fae345947e83e Mon Sep 17 00:00:00 2001 From: jola7373 Date: Sun, 16 Jan 2022 01:44:14 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=9E=90?= =?UTF-8?q?=EB=A5=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Q09_stringCompression/OtherSolution.java | 5 ++ .../Q09_stringCompression/Solution.java | 62 +++++++++++++++++++ .../part03/Q40_HideAndSeek/Solution.java | 14 ++--- 3 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java create mode 100644 src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java new file mode 100644 index 0000000..27806e6 --- /dev/null +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java @@ -0,0 +1,5 @@ +package jihye.thisiscodingtest.part03.Q09_stringCompression; + +public class OtherSolution { + +} diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java new file mode 100644 index 0000000..39c73cc --- /dev/null +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java @@ -0,0 +1,62 @@ +package jihye.thisiscodingtest.part03.Q09_stringCompression; + +public class Solution { + private static boolean check = false; + + public static void main(String[] args) { + String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + System.out.println(solution(s)); + } + + public static int solution(String s) { + int unit = 1; + int ans = Integer.MAX_VALUE; + + while (true) { + if (unit > s.length() / 2) {//자르는 단위가 절반을 넘어가면 break + break; + } else { + int n = findCompression(unit, s); + if (check == true) { + ans = Math.min(ans, n); + } + } + unit++; + check = false; + } + + if(ans == Integer.MAX_VALUE){ + return s.length(); + } + return ans; + } + + public static int findCompression(int unit, String s) {//문자열 찾기 구간 + String newString = ""; + String one = s.substring(0, unit);//하나의 일치하는 스트링 단위 + int end = 0; + for (int i = unit; i < s.length(); i += unit) { + int count = 1; + while (i <= s.length() - unit && s.substring(i, i + unit).equals(one)) { + count++; + i = i + unit; + } + if (count != 1) {//count가 2이상일때 + check = true; + newString += count + one;//newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); + } else { + newString += one; + } + if (i + unit > s.length()) { + end = i; + break; + } + one = s.substring(i, i + unit); + + } + if (end <= s.length()) { + newString += s.substring(end); + } + return newString.length(); + } +} diff --git a/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java b/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java index 504cea5..2a40212 100644 --- a/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java @@ -13,7 +13,7 @@ public Node(int end, int weight) { public class Solution { - public static ArrayList[] graph; + public static ArrayList[] graph; public static boolean[] visited; public static int INF = Integer.MAX_VALUE; public static int[] distance; @@ -61,12 +61,12 @@ public static void dijkstra(int start) { } check[cur] = true; -// for (Node node : graph[cur]) {//list에서 node를 하나씩 꺼내서 -// if (dist[node.end] > dist[cur] + node.weight) {//만일 현재 노드를 거쳐서 가는 경우가 더 짧은경우 -// dist[node.end] = dist[cur] + node.weight;//거리를 더 짧은 걸로 업데이트후 -// queue.add(new Node(node.end, dist[node.end]));//큐에 더해준다 -// } -// } + for (Node node : graph[cur]) {//list에서 node를 하나씩 꺼내서 + if (dist[node.end] > dist[cur] + node.weight) {//만일 현재 노드를 거쳐서 가는 경우가 더 짧은경우 + dist[node.end] = dist[cur] + node.weight;//거리를 더 짧은 걸로 업데이트후 + queue.add(new Node(node.end, dist[node.end]));//큐에 더해준다 + } + } } } } From ab269fb53e76f28b4d6008f76919c548263405d8 Mon Sep 17 00:00:00 2001 From: jola7373 Date: Sun, 16 Jan 2022 01:49:11 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../part03/Q09_stringCompression/OtherSolution.java | 4 +++- .../part03/Q09_stringCompression/Solution.java | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java index 27806e6..a28420b 100644 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java @@ -1,5 +1,7 @@ package jihye.thisiscodingtest.part03.Q09_stringCompression; public class OtherSolution { - + public static void main(String[] args) { + + } } diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java index 39c73cc..189bced 100644 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java @@ -25,7 +25,7 @@ public static int solution(String s) { check = false; } - if(ans == Integer.MAX_VALUE){ + if (ans == Integer.MAX_VALUE) { return s.length(); } return ans; @@ -44,17 +44,17 @@ public static int findCompression(int unit, String s) {//문자열 찾기 구간 if (count != 1) {//count가 2이상일때 check = true; newString += count + one;//newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); - } else { + } else { newString += one; } - if (i + unit > s.length()) { + if (i + unit > s.length()) {//범위 체크 end = i; break; } one = s.substring(i, i + unit); } - if (end <= s.length()) { + if (end <= s.length()) {//만일 남은 unit단위 보다 작은 문자열이 남았을시 더해준다. newString += s.substring(end); } return newString.length(); From 362859cfb840db2dd311b155eff18b1d05d3f191 Mon Sep 17 00:00:00 2001 From: jola7373 Date: Sun, 16 Jan 2022 19:36:49 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Q09_stringCompression/Solution.java | 36 ++++++++++--------- .../part03/Q40_HideAndSeek/Solution.java | 18 +++++++++- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java index 189bced..9ba68b7 100644 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java @@ -10,53 +10,55 @@ public static void main(String[] args) { public static int solution(String s) { int unit = 1; - int ans = Integer.MAX_VALUE; + int answer = s.length(); while (true) { if (unit > s.length() / 2) {//자르는 단위가 절반을 넘어가면 break break; } else { - int n = findCompression(unit, s); + int n = CompressedStringLength(unit, s); if (check == true) { - ans = Math.min(ans, n); + answer = Math.min(answer, n); } } unit++; check = false; } - if (ans == Integer.MAX_VALUE) { - return s.length(); - } - return ans; + return answer; } - public static int findCompression(int unit, String s) {//문자열 찾기 구간 - String newString = ""; - String one = s.substring(0, unit);//하나의 일치하는 스트링 단위 + public static int CompressedStringLength(int unit, String s) {//문자열 찾기 구간 + StringBuilder compressedString = new StringBuilder(); + String oneUnit = s.substring(0, unit);//하나의 일치하는 스트링 단위 int end = 0; + //문자열을 자르는 단위만큼 잘라서 다음 단위와 일치하는지 + //일치한다면 그 수를 count해서 newString에 넣어준다 for (int i = unit; i < s.length(); i += unit) { int count = 1; - while (i <= s.length() - unit && s.substring(i, i + unit).equals(one)) { + boolean equals = s.substring(i, i + unit).equals(oneUnit); + + while (i <= s.length() - unit && equals) { count++; i = i + unit; } - if (count != 1) {//count가 2이상일때 + if (count > 1) {//count가 2이상일때 check = true; - newString += count + one;//newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); + compressedString.append(Integer.toString(count));//newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); + compressedString.append(oneUnit); } else { - newString += one; + compressedString.append(oneUnit); } if (i + unit > s.length()) {//범위 체크 end = i; break; } - one = s.substring(i, i + unit); + oneUnit = s.substring(i, i + unit); } if (end <= s.length()) {//만일 남은 unit단위 보다 작은 문자열이 남았을시 더해준다. - newString += s.substring(end); + compressedString.append(s.substring(end)); } - return newString.length(); + return compressedString.length(); } } diff --git a/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java b/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java index 2a40212..1da4f82 100644 --- a/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q40_HideAndSeek/Solution.java @@ -16,7 +16,7 @@ public class Solution { public static ArrayList[] graph; public static boolean[] visited; public static int INF = Integer.MAX_VALUE; - public static int[] distance; + // public static int[] distance; public static int N; public static int M; static int[] dist; @@ -27,6 +27,7 @@ public static void main(String[] args) { N = sc.nextInt(); M = sc.nextInt(); graph = new ArrayList[N + 1]; + dist = new int[N + 1]; Arrays.fill(dist, INF); @@ -44,6 +45,21 @@ public static void main(String[] args) { dijkstra(1); + int maxDistance = 0; + int maxNode = 0; + int sameCount = 0; + + for (int i = 1; i < N + 1; i++) { + if (maxDistance < dist[i]) { + maxNode = i; + maxDistance = dist[i]; + sameCount = 0; + } + if (maxDistance == dist[i]) { + sameCount++; + } + } + System.out.println(maxNode + " " + maxDistance + " " + sameCount); } public static void dijkstra(int start) { From 052a4ce6d066e19e4605d93c75cac18d6373b0a7 Mon Sep 17 00:00:00 2001 From: jola7373 Date: Sun, 16 Jan 2022 19:50:44 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../part03/Q09_stringCompression/Solution.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java index 9ba68b7..a399575 100644 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java @@ -36,9 +36,8 @@ public static int CompressedStringLength(int unit, String s) {//문자열 찾기 //일치한다면 그 수를 count해서 newString에 넣어준다 for (int i = unit; i < s.length(); i += unit) { int count = 1; - boolean equals = s.substring(i, i + unit).equals(oneUnit); - while (i <= s.length() - unit && equals) { + while (isSame(i , s, unit, oneUnit)) { count++; i = i + unit; } @@ -61,4 +60,7 @@ public static int CompressedStringLength(int unit, String s) {//문자열 찾기 } return compressedString.length(); } + public static boolean isSame(int i , String s, int unit, String oneUnit){ + return i <= s.length() - unit && s.substring(i, i + unit).equals(oneUnit); + } } From 7020f6c9447987f19c0d13d4a8c061e8cb36ddac Mon Sep 17 00:00:00 2001 From: jola7373 Date: Sun, 16 Jan 2022 19:51:45 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=ED=95=84=EC=9A=94=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../part03/Q09_stringCompression/OtherSolution.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java deleted file mode 100644 index a28420b..0000000 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/OtherSolution.java +++ /dev/null @@ -1,7 +0,0 @@ -package jihye.thisiscodingtest.part03.Q09_stringCompression; - -public class OtherSolution { - public static void main(String[] args) { - - } -} From 77b0bbb7ae08b71b2300e49f509a4c2348184d07 Mon Sep 17 00:00:00 2001 From: jola7373 Date: Tue, 18 Jan 2022 19:07:57 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=EB=B8=94=EB=A1=9D=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=ED=91=B8=EB=8A=94=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../part03/Q22_movingBlock/Main.java | 141 ++++++++++++++++++ .../Q09_stringCompression/Solution.java | 39 +++-- 2 files changed, 159 insertions(+), 21 deletions(-) create mode 100644 src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java diff --git a/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java b/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java new file mode 100644 index 0000000..1ac8c5c --- /dev/null +++ b/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java @@ -0,0 +1,141 @@ +package annmj.thisiscodingtest.part03.Q22_movingBlock; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.Queue; +import java.util.Scanner; + +/* +(1,1)의 위치에서 (N,N)까지 이동하는데 걸리는 시간을 출력 + +무지가 이동취할 수 있는 행동 +1. 상,하,좌,우 이동 +2. 90도 돌기 first기준, second기준 으로 2가지 방향으로 가능 + + */ +class Node{ + + public Node(int xFirst, int yFirst, int xEnd, int yEnd, boolean ishorizontal) { + this.xFirst = xFirst; + this.yFirst = yFirst; + this.xEnd = xEnd; + this.yEnd = yEnd; + this.horizontal = ishorizontal; + } + + public int getxFirst() { + return xFirst; + } + + public void setxFirst(int xFirst) { + this.xFirst = xFirst; + } + + public int getyFirst() { + return yFirst; + } + + public void setyFirst(int yFirst) { + this.yFirst = yFirst; + } + + public int getxEnd() { + return xEnd; + } + + public void setxEnd(int xEnd) { + this.xEnd = xEnd; + } + + public int getyEnd() { + return yEnd; + } + + public void setyEnd(int yEnd) { + this.yEnd = yEnd; + } + public boolean isHorizontal() { + return ishorizontal; + } + + public void setisHorizontal(boolean horizontal) { + this.ishorizontal = horizontal; + } + + int xFirst; + int yFirst; + int xEnd; + int yEnd; + boolean ishorizontal; + + + +} +public class Main { + static int answer; + static int N; + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + } + public int solution(int[][] board) { + answer = 0; + N = board.length; + + bfs(board); + return answer; + } + public static void bfs(int[][] board){ + Queue queue = new LinkedList<>(); + boolean visited[][] = new boolean[board.length+1][board.length+1]; + Arrays.fill(visited[0], true); + + queue.add(new Node(1,1,1,2, true)); + while (!queue.isEmpty()){ + Node current = queue.poll(); + + int xFirst = current.getxFirst(); + int yFirst = current.getyFirst(); + int xEnd = current.getxEnd(); + int yEnd = current.getyEnd(); + boolean isHorizontal = current.isHorizontal(); + + for (int i = 0; i < 4; i++) { + + //이동시에 두가지 케이스로 나뉜다. + //가로일시, 세로일시 + if(isHorizontal){ //가로일때 + int nxFirst = xFirst + dx[i]; + int nyFirst = yFirst + dy[i]; + int nxEnd = xEnd + dx[i]; + int nyEnd = yEnd + dy[i]; + }else{ //세로일때 + int nxFirst = xFirst + dx[i]; + int nyFirst = yFirst + dy[i]; + int nxEnd = xEnd + dx[i]; + int nyEnd = yEnd + dy[i]; + } + + if(boundaryCheck(nxFirst,nyFirst,nxEnd, nyEnd) || visit[nx][ny] ){ + //90도 도는 로직 + + } + int diff = Math.max(arr[nx][ny], arr[x][y]) - Math.min(arr[nx][ny], arr[x][y]); + if(diff >= L && diff <= R) { + unionExist = true; + union[nx][ny] = count; + dfs(count, nx, ny); + } + } + } + } + public static void turn(){ + + } + //범위를 넘어가는지 확인하는 메서드 + public static boolean boundaryCheck(int nxFirst,int nyFirst,int nxEnd, int nyEnd){ + return nxFirst < 0 || nyFirst < 0 || nxFirst >= N || nyFirst >= N || + nxEnd < 0 || nyEnd < 0 || nxEnd >= N || nyEnd >= N; + } +} diff --git a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java index a399575..6b7c933 100644 --- a/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java +++ b/src/jihye/thisiscodingtest/part03/Q09_stringCompression/Solution.java @@ -1,7 +1,6 @@ package jihye.thisiscodingtest.part03.Q09_stringCompression; public class Solution { - private static boolean check = false; public static void main(String[] args) { String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; @@ -13,54 +12,52 @@ public static int solution(String s) { int answer = s.length(); while (true) { - if (unit > s.length() / 2) {//자르는 단위가 절반을 넘어가면 break + if (unit > s.length() / 2) { //자르는 단위가 절반을 넘어가면 break break; } else { - int n = CompressedStringLength(unit, s); - if (check == true) { - answer = Math.min(answer, n); - } + int n = getCompressedStringLength(unit, s); + answer = Math.min(answer, n); } unit++; - check = false; } return answer; } - public static int CompressedStringLength(int unit, String s) {//문자열 찾기 구간 + public static int getCompressedStringLength(int unit, String s) { //문자열 찾기 구간 StringBuilder compressedString = new StringBuilder(); - String oneUnit = s.substring(0, unit);//하나의 일치하는 스트링 단위 + String current = s.substring(0, unit); //하나의 일치하는 스트링 단위 int end = 0; + //문자열을 자르는 단위만큼 잘라서 다음 단위와 일치하는지 //일치한다면 그 수를 count해서 newString에 넣어준다 + for (int i = unit; i < s.length(); i += unit) { int count = 1; - while (isSame(i , s, unit, oneUnit)) { + while (isSame(i , s, unit, current)) { count++; i = i + unit; } - if (count > 1) {//count가 2이상일때 - check = true; - compressedString.append(Integer.toString(count));//newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); - compressedString.append(oneUnit); - } else { - compressedString.append(oneUnit); + if (count > 1) { //count가 2이상일때 + compressedString.append(Integer.toString(count)); //newString에 count와 반복되는 string(one)을 넣는다 System.out.println(newString); } - if (i + unit > s.length()) {//범위 체크 + compressedString.append(current); + + if (i + unit > s.length()) { //범위 체크 end = i; break; } - oneUnit = s.substring(i, i + unit); - + current = s.substring(i, i + unit); } - if (end <= s.length()) {//만일 남은 unit단위 보다 작은 문자열이 남았을시 더해준다. + + if (end <= s.length()) { //만일 남은 unit단위 보다 작은 문자열이 남았을시 더해준다. compressedString.append(s.substring(end)); } return compressedString.length(); } + public static boolean isSame(int i , String s, int unit, String oneUnit){ return i <= s.length() - unit && s.substring(i, i + unit).equals(oneUnit); } -} +} \ No newline at end of file From cee018f40abaf8fb291b37f49852d08d4591ac67 Mon Sep 17 00:00:00 2001 From: jola7373 Date: Wed, 19 Jan 2022 16:50:06 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=ED=8E=B8=EC=A7=91=20=EA=B1=B0=EB=A6=AC=20?= =?UTF-8?q?=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../part03/Q22_movingBlock/Main.java | 141 ------------------ .../part03/Q36_editing/MainFail.java | 61 ++++++++ .../part03/Q36_editing/Solution.java | 50 +++++++ 3 files changed, 111 insertions(+), 141 deletions(-) delete mode 100644 src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java create mode 100644 src/jihye/thisiscodingtest/part03/Q36_editing/MainFail.java create mode 100644 src/jihye/thisiscodingtest/part03/Q36_editing/Solution.java diff --git a/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java b/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java deleted file mode 100644 index 1ac8c5c..0000000 --- a/src/annmj/thisiscodingtest/part03/Q22_movingBlock/Main.java +++ /dev/null @@ -1,141 +0,0 @@ -package annmj.thisiscodingtest.part03.Q22_movingBlock; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.Queue; -import java.util.Scanner; - -/* -(1,1)의 위치에서 (N,N)까지 이동하는데 걸리는 시간을 출력 - -무지가 이동취할 수 있는 행동 -1. 상,하,좌,우 이동 -2. 90도 돌기 first기준, second기준 으로 2가지 방향으로 가능 - - */ -class Node{ - - public Node(int xFirst, int yFirst, int xEnd, int yEnd, boolean ishorizontal) { - this.xFirst = xFirst; - this.yFirst = yFirst; - this.xEnd = xEnd; - this.yEnd = yEnd; - this.horizontal = ishorizontal; - } - - public int getxFirst() { - return xFirst; - } - - public void setxFirst(int xFirst) { - this.xFirst = xFirst; - } - - public int getyFirst() { - return yFirst; - } - - public void setyFirst(int yFirst) { - this.yFirst = yFirst; - } - - public int getxEnd() { - return xEnd; - } - - public void setxEnd(int xEnd) { - this.xEnd = xEnd; - } - - public int getyEnd() { - return yEnd; - } - - public void setyEnd(int yEnd) { - this.yEnd = yEnd; - } - public boolean isHorizontal() { - return ishorizontal; - } - - public void setisHorizontal(boolean horizontal) { - this.ishorizontal = horizontal; - } - - int xFirst; - int yFirst; - int xEnd; - int yEnd; - boolean ishorizontal; - - - -} -public class Main { - static int answer; - static int N; - - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - - } - public int solution(int[][] board) { - answer = 0; - N = board.length; - - bfs(board); - return answer; - } - public static void bfs(int[][] board){ - Queue queue = new LinkedList<>(); - boolean visited[][] = new boolean[board.length+1][board.length+1]; - Arrays.fill(visited[0], true); - - queue.add(new Node(1,1,1,2, true)); - while (!queue.isEmpty()){ - Node current = queue.poll(); - - int xFirst = current.getxFirst(); - int yFirst = current.getyFirst(); - int xEnd = current.getxEnd(); - int yEnd = current.getyEnd(); - boolean isHorizontal = current.isHorizontal(); - - for (int i = 0; i < 4; i++) { - - //이동시에 두가지 케이스로 나뉜다. - //가로일시, 세로일시 - if(isHorizontal){ //가로일때 - int nxFirst = xFirst + dx[i]; - int nyFirst = yFirst + dy[i]; - int nxEnd = xEnd + dx[i]; - int nyEnd = yEnd + dy[i]; - }else{ //세로일때 - int nxFirst = xFirst + dx[i]; - int nyFirst = yFirst + dy[i]; - int nxEnd = xEnd + dx[i]; - int nyEnd = yEnd + dy[i]; - } - - if(boundaryCheck(nxFirst,nyFirst,nxEnd, nyEnd) || visit[nx][ny] ){ - //90도 도는 로직 - - } - int diff = Math.max(arr[nx][ny], arr[x][y]) - Math.min(arr[nx][ny], arr[x][y]); - if(diff >= L && diff <= R) { - unionExist = true; - union[nx][ny] = count; - dfs(count, nx, ny); - } - } - } - } - public static void turn(){ - - } - //범위를 넘어가는지 확인하는 메서드 - public static boolean boundaryCheck(int nxFirst,int nyFirst,int nxEnd, int nyEnd){ - return nxFirst < 0 || nyFirst < 0 || nxFirst >= N || nyFirst >= N || - nxEnd < 0 || nyEnd < 0 || nxEnd >= N || nyEnd >= N; - } -} diff --git a/src/jihye/thisiscodingtest/part03/Q36_editing/MainFail.java b/src/jihye/thisiscodingtest/part03/Q36_editing/MainFail.java new file mode 100644 index 0000000..47e4961 --- /dev/null +++ b/src/jihye/thisiscodingtest/part03/Q36_editing/MainFail.java @@ -0,0 +1,61 @@ +//package jihye.thisiscodingtest.part03.Q36_editing; +// +//import java.util.Scanner; +// +//public class Main { +// static int[] dp; +// static String A; +// static String B; +// +// public static void main(String[] args) { +// Scanner sc = new Scanner(System.in); +// A = sc.nextLine(); +// B = sc.nextLine(); +// StringBuilder sb = new StringBuilder(); +// +// dp = new int[B.length()]; +// +// System.out.println(findLength(sb, 0)); +// } +// +// // 재귀 +// public static int findLength(StringBuilder current, int index) { +// if (current.toString() == B) { +// return dp[index]; +// } +// if (A.charAt(index) == B.charAt(index)) { +// dp[index] = dp[index - 1];//같다면 굳이 편집을 안해도 되니 값 유지 하지만 초기 값 설정해줘야됨 +// return findLength(current.append(A.charAt(index)), index + 1); +// } +//// getExchangeCount(current, index);// +//// getRemoveCount(); +//// getAddCount(); +//// return count; +// } +// +// //문자를 삭제할 때의 로직 +// public int getRemoveCount(StringBuilder current, int index) { +// int count = 0; +// while (!(A.charAt(index) == current.charAt(index))) {//같은 문자가 나올때 까지 삭제한다 +// if (current.length() == 0) { +// return 10000;//나올 수 없는 최대의 수 +// } +// count++;//그 수를 count +// current.deleteCharAt(index); +// } +// dp[index] = Math.min(dp[index - 1] + count, dp[index]);//기존에 dp[index]에 기록된것과 비교 +// return findLength(current, index); +// } +// +// //문자 더하기 +// public static int getAddCount(StringBuilder current, int index) { +// dp[index] = Math.min(dp[index - 1] + 1, dp[index]);//문자를 더하기 때문에 +1 +// return findLength(current.append(A.charAt(index)), index + 1); +// } +// +// //문자 교체 +// public static void getExchangeCount(char before, char current) { +//// dp[index] = Math.min();/ +//// return findLength(current.replac()); +// } +//} diff --git a/src/jihye/thisiscodingtest/part03/Q36_editing/Solution.java b/src/jihye/thisiscodingtest/part03/Q36_editing/Solution.java new file mode 100644 index 0000000..63e1506 --- /dev/null +++ b/src/jihye/thisiscodingtest/part03/Q36_editing/Solution.java @@ -0,0 +1,50 @@ +package jihye.thisiscodingtest.part03.Q36_editing; + +import java.util.Scanner; + +public class Solution { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + String str1 = sc.nextLine(); + String str2 = sc.nextLine(); + + int answer = editDistance(str1, str2); + System.out.println(answer); + } + + public static int editDistance(String str1, String str2) { + int length1 = str1.length(); + int lenght2 = str2.length(); + + int[][] dp = new int[length1 + 1][lenght2 + 1]; + + // 아무것도 없는데서 str1까지 만드는데 드는 값 + for (int i = 1; i < length1 + 1; i++) { + dp[i][0] = i; + } + + // 아무것도 없는데서 str2까지 만드는데 드는 값 + for (int j = 1; j < lenght2 + 1; j++) { + dp[0][j] = j; + } + + //최소 편집 거리 계산 + for (int i = 1; i < length1 + 1; i++) { + for (int j = 1; j < lenght2 + 1; j++) { + + // 만약 문자가 같다면 왼쪽위에 해당하는 수 그대로 대입 + // 왼쪽위는 문자 더하기 str1에 있는 character 더하기 전 & str2에 있는 character 더하기 전 + // su에서 sa로 바뀔 때 왼쪽 위는 s만 있는 상태에서 바꾸는 것 고려 + if (str1.charAt(i - 1) == str2.charAt(j - 1)) { + dp[i][j] = dp[i - 1][j - 1]; + } else { // 문자가 다를경우 + //dp[i][j-1]은 삽입하는 케이스 + //dp[i-1][j]는 삭제하는 케이스 + //dp[i-1][j-1]은 교체하는 케이스 + dp[i][j] = 1 + Math.min(Math.min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1]); + } + } + } + return dp[length1][lenght2]; + } +}