Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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);
}
}
}
138 changes: 138 additions & 0 deletions src/jihye/thisiscodingtest/part03/Q22_movingBlock/MainFail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
//package jihye.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.ishorizontal = 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 MainFail {
// static int answer;
// static int N;
// static int dx[] = {-1,1,0,0};
// static int dy[] = {0,0,-1,1};
//
// 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<Node> 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도 도는 로직
//
// }
//
// }
// }
// }
// 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;
// }
//}
172 changes: 172 additions & 0 deletions src/jihye/thisiscodingtest/part03/Q22_movingBlock/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
//package jihye.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) {
// this.xFirst = xFirst;
// this.yFirst = yFirst;
// this.xEnd = xEnd;
// this.yEnd = yEnd;
// }
//
// 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 Solution {
// static int answer;
// static int N;
// static int dx[] = {-1, 1, 0, 0};
// static int dy[] = {0, 0, -1, 1};
//
// public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// int[][] board = {{0, 0, 0, 1, 1}, {0, 0, 0, 1, 0}, {0, 1, 0, 1, 1},
// {1, 1, 0, 0, 1}, {0, 0, 0, 0, 0}};
// System.out.println(solution(board));
// }
//
// public static int solution(int[][] board) {
// answer = 0;
// N = board.length;
//
// bfs(board);
// return answer;
// }
//
// public static void bfs(int[][] board) {
// Queue<Node> queue = new LinkedList<>();
// boolean visited[][][] = new boolean[board.length + 1][board.length + 1][2];
// Arrays.fill(visited[0], true);
// int[] rotate = {-1, 1};
//
// queue.add(new Node(1, 1, 1, 2));
// 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();
//
// if (hasArrived(xFirst, yFirst, xEnd, yEnd)) {
// return;
// }
//
// //상하좌우 이동
// for (int i = 0; i < 4; i++) {
// int nxFirst = xFirst + dx[i];
// int nyFirst = yFirst + dy[i];
// int nxEnd = xEnd + dx[i];
// int nyEnd = yEnd + dy[i];
//
// if ((board[nxFirst][nyFirst] == 0) && (board[nxEnd][nyEnd] == 0)) {
//// if(!(visited[nxFirst][nyFirst]) && (visited[nxEnd][nyEnd]))//빙문 확인후
// queue.add(new Node(nxFirst, nyFirst, nxEnd, nyEnd));
// queue.add(new Node(nxEnd, nyEnd, nxFirst, nyFirst));
// }
// }
//
// //가로 회전
// if (xFirst == xEnd) {
// for (int r : rotate) {
// int nxFirst = xFirst + r;
// int nyFirst = yFirst;
// int nxEnd = xEnd + r;
// int nyEnd = yEnd;
//
// if ((board[nxFirst][nyFirst] == 0) && (board[nxEnd][nyEnd] == 0)) {
// !(visited[nxFirst][nyFirst]) && (visited[nxEnd][nyEnd])
// queue.add(new Node(nxFirst, nyFirst, nxEnd, nyEnd));
// queue.add(new Node(nxEnd, nyEnd, nxFirst, nyFirst));
// }
// }
// }
//
// //세로 회전
// if (yFirst == yEnd) {
// for (int r : rotate) {
// int nxFirst = xFirst;
// int nyFirst = yFirst + r;
// int nxEnd = xEnd;
// int nyEnd = yEnd + r;
//
// if (!(visited[nxFirst][nyFirst]) && (visited[nxEnd][nyEnd])) {
// queue.add(new Node(nxFirst, nyFirst, nxEnd, nyEnd));
// queue.add(new Node(nxEnd, nyEnd, nxFirst, nyFirst));
// }
// }
// }
// answer++;
// }
// }
//
//
// //범위를 넘어가는지 확인하는 메서드
// 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;
// }
//
// //도착했는지 확인
// public static boolean hasArrived(int xFirst, int yFirst, int xEnd, int yEnd) {
// return (xFirst == N && yFirst == N) || (xEnd == N && yEnd == N);
// }
//}