티스토리 뷰
728x90
반응형
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자
programmers.co.kr
문제 풀이
저는 스택을 이용하여 풀었습니다.
전체적인 프로세스는 이렇습니다.
1. 1부터 입력으로 들어온 String의 크기까지 잘라 Stack에 넣는다.
2. 스택에서 꺼낸다.
2-1) 스택에서 꺼낸 값이 문자열일 경우 반복된 횟수 num 변수에 1을 넣는다.
2-2) 스택에서 꺼낸 값이 숫자일 경우 반복된 횟수 num 변수에 넣는다. 다시 스택에서 문자열을 꺼낸다.
3. 스택에서 꺼낸 문자열과 stack의 top 위치의 문자열을 비교한다.
3-1) 같을 시 num+1하여 stack에 넣는다.
3-2) 다를 시 num의 자리값과 문자열의 크기를 더한다.
4. 1-3을 반복하여 최솟값을 answer에 넣는다.
소스 코드
import java.util.*;
class Solution {
public static int solution(String s) {
int answer = Integer.MAX_VALUE;
for(int i=1;i<=s.length();i++) {
Stack<String> st = new Stack<>();
int len = s.length()/i;
for(int j=0; j<=len;j++) {
if(j==len) st.add(s.substring(j*i));
else st.add(s.substring(j*i,(j+1)*i));
}
int size=0;
while(!st.isEmpty()) {
String word = st.pop();
int num=1;
if(word.matches("[0-9]{1,}")) {
num= Integer.parseInt(word);
word = st.pop();
}
try {
if(word.equals(st.peek())) {
st.add(""+(num+1));
}else {
if(num != 1) size += Math.ceil(Math.log10(num+1))+ word.length();
else size += word.length();
}
} catch (Exception e) {
if(num != 1) size += Math.ceil(Math.log10(num+1))+ word.length();
else size += word.length();
}
}
answer = Math.min(answer, size);
}
return answer;
}
}
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[ 백준 1149 ] RGB 거리 - Java (1) | 2020.12.16 |
---|---|
[ 백준 1904 ] 01타일 ( Java ) (0) | 2020.12.15 |
[프로그래머스/Java] 괄호 변환 (0) | 2020.12.11 |
[프로그래머스 / Java] 숫자의 표현 (0) | 2020.12.10 |
[프로그래머스/Java] 문자열 내 마음대로 정렬하기 (2) | 2020.12.09 |
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 청소년상어
- 카카오 코딩 테스트
- 카카오 인턴십
- 키패드 누르기
- javascript
- 가장 큰 수
- local cache
- 19236
- 오버로딩
- 01타일
- 삼성 코테
- 삼각달팽이
- 39회차
- vaild
- java
- 문자열 압축
- for of
- 커링
- 날짜 유효성
- 프로그래머스
- 반례
- yyyy-MM-dd
- 삼성기출
- RGB거리
- DP
- 제네릭(Generic)
- 제네릭 타입
- 1629
- 백준
- spring cache
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함