문제를 보자
입력받은 문자열이 연속된 숫자만큼 앞에 숫자를 적고 뒤에 연속된 문자열을 넣어주는 식의 문제이다.
중복된 문자열을 삭제하고, 연속된 만큼 숫자를 적어주면 가장 짧은 길이의 문자열이 되는데, 그 길이를 반환해주면 된다.
예시를 보자.
입력값 #2 에서 "ababcdcdababcdcd"는 총 16자리의 문자로, 8개의 문자로 잘라주면 ababcdcd가 2번 연속나오기 때문에 "2ababcdcd"가 되어 총 길이가 9인 문자열이 된다.
그러면 어떻게 풀어나가면 좋을까?
일단, 하나부터 문자열의 길이의 반만큼까지 문자열을 잘라 비교해본다.
만약 입력값 #2를 예시로 들면, 1개의 문자로 나누어 버리면 다음 b와 비교 후 그 다음 a를 다시 그 다음 값과 비교해야 한다.
그렇기에 다음 시작값에 문자를 자른 만큼 더해 비교할 수 있다.
0번째 index이면 다음 비교는 2번째 index에서 비교한다.)
비교할 대상인 diff와 word를 사용해 만약 같으면 count를 +1, count가 1이라면 숫자 1를 제외하고 문자열만 붙여주고, 다르다면 중복된 숫자 + 중복된 문자열을 StringBuilder를 사용해 붙여준다.
그리고 다음 문자 비교를 위해 diff를 word로, count는 다시 1로 초기화 해준다.
마지막으로 자른 문자열인 word가 자르는 i만큼 남아있지 않다면 그대로 출력시키고, StringBuilder에서 적은 값들 중 가장 길이가 작은 값을 answer로 둔다.
결과는?
성공이다!
'Algorithm' 카테고리의 다른 글
[프로그래머스 LV.1] 개인정보 수집 유효기간 (0) | 2023.08.01 |
---|---|
[프로그래머스(LV2), JAVA]오픈채팅방 (0) | 2022.08.24 |
[프로그래머스(Lv2), JAVA]두 큐 합 같게 만들기 (0) | 2022.08.22 |
[JAVA]백준 1157 - 단어 공부 (0) | 2022.08.17 |
[JAVA]백준 1065 - 한수 (0) | 2022.08.11 |