티스토리 뷰
풀이
- 카카오 2020 블라인드 1차코테에 나왔던 문제이다.
그당시 예외처리하고 하느라 은근 오래걸렸던 것 같은데 그동안 짬바(?)가 쌓였는지 저번보단 적게, 수월하게 풀었다
- 특정한 규칙이 보이지 않아 모든 케이스를 다 구해야 하구나.. 생각했다.
- 문자열을 자를 수 있는 개수를 전부 돌려보면서 비교했다.
StringBuillder
로 하나씩 붙여나갔다.- 자른 문자열 이전 값과 다음 값을 비교해주며
cnt
가 2 이상이면 숫자까지 붙여주면 된다. substring
의 인덱스만 조심해주면 쉽게 풀 수 있는 문제!
코드
import java.util.*;
class Solution {
public int solution(String s) {
int len = s.length();
int answer = len;
for (int i = 1; i <= len / 2; i++) {
StringBuilder sb = new StringBuilder();
String prev = s.substring(0, i);
int cnt = 1;
int idx = 0;
for (int j = i; j < len; j+= i) {
if (j + i > len) {
idx = j;
break;
}
String next = s.substring(j, j + i);
// System.out.println("prev, next = " + prev + ", " + next);
if (prev.equals(next)) cnt++;
else {
if (cnt > 1) sb.append(cnt);
sb.append(prev);
cnt = 1;
}
prev = next;
}
if (cnt > 1) sb.append(cnt);
sb.append(prev);
if (idx > 0) sb.append(s.substring(idx));
// System.out.println(sb.toString() + ", " + sb.toString().length());
answer = Math.min(answer, sb.toString().length());
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[백준] 1890. 점프 (Java) (0) | 2021.11.18 |
---|---|
[백준] 10814. 나이순 정렬 (Java) (0) | 2021.10.08 |
[백준] 7682. 틱택토 (Java) (0) | 2021.09.16 |
문자열 문제풀이에 유용한 replaceAll(), matches() (ft. 정규표현식) (0) | 2021.09.09 |
[백준] 1107. 리모컨 (Java) (0) | 2021.08.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- matches
- CustomHook
- 백준
- 삼성역테기출
- form
- 구현
- swea
- BigInteger
- 백트래킹
- 다익스트라
- dp
- Validation
- 우선순위큐
- 해시
- 시뮬레이션
- dfs
- 알고리즘
- regex
- web
- REACT
- BFS
- 벨만포드
- 정규식
- 이분탐색
- 프로그래머스
- vue.js
- java
- 브루트포스
- 문자열
- 그래프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함