티스토리 뷰
728x90
반응형
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/60057
문제 풀이
저는 스택을 이용하여 풀었습니다.
전체적인 프로세스는 이렇습니다.
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
- 카카오 인턴십
- 키패드 누르기
- DP
- 01타일
- 청소년상어
- vaild
- local cache
- spring cache
- 삼각달팽이
- 제네릭(Generic)
- javascript
- java
- 오버로딩
- yyyy-MM-dd
- 문자열 압축
- 반례
- 가장 큰 수
- 커링
- RGB거리
- for of
- 삼성기출
- 1629
- 삼성 코테
- 제네릭 타입
- 날짜 유효성
- 19236
- 39회차
- 카카오 코딩 테스트
- 백준
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
글 보관함