https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이 접근
1. 1부터 s/2 길이까지 잘라보면서 결과의 최소값을 비교한다.
2. base 문자열과 cur 문자열을 설정해서 값이 같은지 비교한다.
2-1. base문자열은 맨 처음 잘라야 하는 부분
2-2 cur 문자열은 현재 가르키고 있는 부분
3. 만약에 문자열을 비교했을 때, 일치한다면 count를 1 증가시켜준다.
4. 문자열이 같지 않을 때, count가 1보다 크다면 숫자를 sb에 더해준다.
4-1. 문자열을 sb에 더해준다.
5. base 문자열을 cur로 재정의 해줘 순차적으로 비교할 수 있게 하고, count를 1로 재설정한다.
6. 문자열 길이를 최솟값으로 계속 갱신해준다.
class Solution {
public int solution(String s) {
int answer = Integer.MAX_VALUE;
if (s.length() == 1) {
return 1;
}
for(int i = 1; i <= s.length() / 2; i++){
StringBuilder sb = new StringBuilder();
int count = 1;
String base = s.substring(0,i);
for (int j = i; j <= s.length(); j += i) {
String cur;
if (j+i > s.length()) {
cur = s.substring(j);
}
else {
cur = s.substring(j,j+i);
}
if (base.equals(cur)) {
count++;
}
else {
if (count > 1) {
sb.append(count);
}
sb.append(base);
base = cur; // base값 재정의
count = 1;
}
}
sb.append(base);
answer = Integer.min(answer, sb.length());
}
return answer;
}
}
문제풀이 회고
인덱스가 이동하는 부분이 너무 헷갈렸다.
특히, 이부분이 나중에도 계속 헷갈렸다.
if (j+i > s.length()) {
cur = s.substring(j);
}
j+i가 현재 문자열 길이보다 긴 경우, j부터 끝까지 잘라서 더해준다.
그 외의 경우엔, s.substr(j,i)만큼 잘라준다.
String base = s.substring(0,i);
cur = s.substring(j,j+i);
이 부분을 더 살펴보면,
길이를 1로 자를 때는, base = s.substring(0,1) ; cur = s.substring(1,2);
길이를 2로 자를 때는, base = s.substring(0,2) ; cur = s.substring(2,4);
이런식으로 길이만큼 비교하게 된다.!
아직 헷갈리는 부분들이 많아서 한번 더 풀어봐야겠다.
'Algorithm > 프로그래머스 코딩테스트 문제풀이전략' 카테고리의 다른 글
[프로그래머스] Lv.2 이진 변환 반복하기 (0) | 2024.04.17 |
---|---|
[프로그래머스]Lv.1 3진법 뒤집기 (0) | 2024.04.17 |
[프로그래머스] Lv.1 이상한 문자 만들기 (0) | 2024.04.16 |
[프로그래머스] Lv.1 시저 암호 (0) | 2024.04.16 |
[프로그래머스] Lv.1 자연수 뒤집어 배열로 만들기 (0) | 2024.04.16 |