반응형
[광고 누르면 오늘의 행운 상승!!]
https://programmers.co.kr/learn/courses/30/lessons/60057
문자열 문제
1. 참고사항
- 문자열을 size/2 까지 잘라서 압축할 수 있다. (그 이상은 의미 x)
- j~j+i 만큼 잘랐는데 남은 수가 있다면 그냥 붙여준다.
- temp에 문자열을 저장했다가 같은 수가 들어오면 count를 증가시킨다.
- 문자열이 한개가 들어온다면 압축이 필요없으므로 1을 출력후 종료
2. 구현
- 1부터 size/2만큼 잘라서 넣는다.
- temp가 비어있다면 넣어주고 (처음 순서)
- temp와 이제 넣을 문자열이 같다면 count를 증가시키고
- temp와 이제 넣을 문자열이 다르다면
- 숫자가 1이라면 붙이지 않는다.
- 숫자가 1 이상이라면 붙인다.
- zip 문자열에 temp를 붙인다.
- 큐가 비워지면 한번더 붙여준다. (마지막 문자열이 zip에 안들어갔기 때문)
- zip.length()의 최소를 갱신한다.
출력.
package Study9;
import java.io.*;
import java.util.*;
public class 문자열압축 {
static int R,C,ans;
static Queue<String> q;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) throws Exception {
String s = "aabbaccc";
int size = s.length();
q = new LinkedList<>();
for (int i = 1; i <= size/2; i++) {
String zip = "";
for (int j = 0; j < size; j++) {
String ss = "";
if(j+i <= size) {
//j부터 i만큼 잘라서 넣기
ss = s.substring(j,j+i);
j=j+i-1;
}else {
//남은 수 넣어주기
ss = s.substring(j,size);
break;
}
q.add(ss);
}
int cnt = 0;
String temp = "";
while(!q.isEmpty()) {
//비어있다면 넣어주기
if(temp.equals("")) {
temp = q.poll();
cnt++;
}else {
//같은 문자열이라면 숫자만 증가
if(temp.equals(q.peek())) {
q.poll();
cnt++;
}else {
//1이 아닐때면 숫자도 넣어주기
if(cnt != 1) {
zip+= String.valueOf(cnt);
cnt=1;
}
//압축된 문자열 넣기
zip+= temp;
temp=q.poll();
}
}
}
//마지막 큐라면 한번 더 넣어줘야 한다. (문자열에 안들어감)
if(cnt>1)
zip+= String.valueOf(cnt);
zip+= temp;
System.out.println(zip);
min = Integer.min(min, zip.length());
}
min = min == Integer.MAX_VALUE ? 1:min;
System.out.println(min);
}
}
반응형
'2. 알고리즘사이트 > 3. 프로그래머스' 카테고리의 다른 글
네트워크 [프로그래머스][DFS][graph] (0) | 2020.06.05 |
---|---|
타겟 넘버 [프로그래머스][DFS] (0) | 2020.06.05 |
H-Index [프로그래머스][배열] (0) | 2020.06.05 |
문자열을 정수로 바꾸기 [프로그래머스][String] (0) | 2020.06.05 |
수박수박수박수박수박수? [String] (0) | 2020.06.05 |