반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스
- IOS
- 플러터 동작
- 거리알고리즘
- 프리즈드
- Singleton
- Android
- 싱글톤
- 비동기 처리
- 초기화
- 에러
- Lazy
- element tree
- dfs
- 자료구조
- zwj
- 앱아이콘 변경
- 플러터
- 재귀
- Kotlin
- 자바
- 알고리즘
- dart
- 완전탐색
- Widget Tree
- linebreak
- flutter
- 코틀린
- Java
- Render object tree
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
자바(JAVA) - 문자열 압축(Programmers : 60057) 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/60057
카카오 코테를 준비하며 접한 문제,,
너무 긴장해서 그런가 문제가 잘 파악이 안되서 정확히 이해하기까지 시간이 많이 소요됐다..
어떤 알고리즘으로 어떻게 효율적으로 쪼갤지 고민을 참 많이하게 한 문제,,
하지만,, 모든 문제를 시원하게 해결해 준 결정적 힌트는 문제 맨 마지막, 5번 예제 설명에 있었다..
'문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다.'
완전 탐색으로 왼쪽으로부터 각 길이만큼의 텍스트를 쪼개며 정답을 쉽게 구할 수 있었다.
실행 순서는 다음과 같다 :
1. Outter For문으로 index 0 - i 까지의 substring 지정
2. Inner For문으로 i 길이만큼씩 텍스트를 잘라가며 output 완성
3. output의 길이와 answer 값중 더 작은 값으로 answer 갱신
4. answer 반환
<코드>
class Solution {
public int solution(String s) {
int answer = 1000;
if(s.length() < 2) {
return s.length();
}
for(int i = 1; i < s.length() / 2 + 2 ; i++) {
// subStr 사이즈 : 압축사이즈
String subStr = s.substring(0, i);
String output = "";
int count = 1;
int lastIndex = 0;
for(int j = i ; j + i <= s.length(); j += i) {
// 비교 대상 String
String strToCompare = s.substring(j, j + i);
// 텍스트가 연속되어 압축 가능한 경우
if(subStr.equals(strToCompare)) {
count++;
// 연속되지 않는 경우
} else {
if(count > 1) {
output += count;
count = 1;
}
output += subStr;
subStr = strToCompare;
}
lastIndex = j + i;
}
// 마지막 round에서 기록된 값 업데이트
if(count > 1)
output += count;
output += subStr;
// String을 끝까지 확인하지 않고 끝난 경우
if(lastIndex < s.length()) {
output += s.substring(lastIndex);
}
// 더 짧은 output 길이로 업데이트
answer = Math.min(answer, output.length());
}
return answer;
}
}
반응형
'Java > Java.algorithm' 카테고리의 다른 글
자바(JAVA) - 부분합(백준 : 1806) (1) | 2021.06.15 |
---|---|
자바(JAVA) - 가사검색(Programmers : 60060) (0) | 2021.06.10 |
자바(JAVA) - 소수 찾기(Programmers : 42839) (0) | 2021.06.10 |
자바(JAVA) - 땅따먹기(Programmers : 12913) (0) | 2021.06.10 |
자바(JAVA) - 크레인 인형뽑기 게임(Programmers : 64061) (0) | 2021.06.10 |
Comments