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
- algorithm
- Brute-force
- 스프링
- TDD
- DFS
- BFS
- lambda
- DP
- 알고리즘
- 운영체제
- baekjoon
- programmers
- 네트워크
- 자료구조
- 그래프
- OS
- 코틀린
- LEVEL2
- back-end
- 모던자바
- 프로젝트
- backtracking
- 자바
- 백트래킹
- Spring
- java
- Java8
- 백준
- kotlin
- 프로그래머스
Archives
- Today
- Total
요깨비's LAB
[프로그래머스, Kotlin] 문자열 압축 본문
import java.util.*
class Solution {
fun solution(s: String): Int {
var answer = Int.MAX_VALUE
var strLen = s.length
var compactIndex = strLen / 2
var compareStr = s.substring(compactIndex, strLen)
for (i in 1..compactIndex) {
var resultStr = ""
var index = 0
while (index <= strLen - (i * 2)) {
var subStr = s.substring(index, index + i)
index += i
var count = 1
var compareStr = s.substring(index, index + i)
while (compareStr.contains(subStr) && index <= strLen - (i)) {
count += 1
index += i
if(index >= strLen || index + i > strLen)
break;
compareStr = s.substring(index, index + i)
}
if (count > 1) {
subStr = StringBuffer().append(count).append(subStr).toString()
} else {
subStr = subStr
}
resultStr += subStr
// resultStr = subStr + s.substring(index, s.length)
}
if(index != strLen) {
resultStr += s.substring(index, strLen)
}
// println("$resultStr - $index")
if (answer > resultStr.length)
answer = resultStr.length
}
if(answer == Int.MAX_VALUE)
answer = 1
return answer
}
}
전체 탐색으로 풀었습니다.
문자열을 1개 단위부터 압축가능한 범위인 (문자열길이/2)까지 (1..(strLen/2))
그안에서 문자열 전체에 대해 전체 연산을 진행하면서
(예를 들면, abcdeaaa일 경우 1개씩이면 [a],[b],[c],...[3a]
2개씩이면 ab-cd 불일치, bc-de 불일치, aa-a인덱스 초과이므로 중지,
3개씩이면 abc-dea 불일치,... dea-aa인덱스 초과이므로 중지,
4개씩이면 abcd-eaaa 불일치 bcde-인덱스 초과이므로 중지)
가장 짧은 문자열을 갱신하면서 마지막에 최종 연산 결과를 반환해주었습니다.
구현은 어찌어찌해서 맞추기는 했지만 실전에서 다시 풀었을때 제대로 풀 수 있을거란 확신이 서지 않기 때문에
해당 문제는 몇번 더 반복해서(다음번에는 자바 혹은 파이썬으로) 풀어보고 익숙하게 구현할 수 있도록 연습하려고 합니다.
'알고리즘(Kotlin) > Brute-Force' 카테고리의 다른 글
[백준, Brute-force, Kotlin] P.9093 단어뒤집기 (0) | 2021.05.28 |
---|---|
[백준, Brute-force, Kotlin] P.10819 차이를 최대로 (0) | 2021.04.02 |
[프로그래머스, Kotlin] 크레인 인형뽑기 게임 (0) | 2021.03.09 |
[백준, Brute-Force, Kotlin] P.2798 블랙잭 (0) | 2020.12.10 |
Comments