인프런 커뮤니티 질문&답변

현이님의 프로필 이미지
현이

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

11. 문자열 압축

11.문자열 압축 문제 결과가 맞게 나오는거 같은데 채점사이트에서 오답이라고 합니다. 피드백 주시면 감사하겠습니다.

작성

·

221

0

import java.util.*;

public class Main {
    public String solution(String str){
        StringBuilder answer = new StringBuilder();
        char [] tmp = str.toCharArray();
        int dis_Count = 1;
        for(int i=0; i<tmp.length; i++){
            //연속으로 들어올때
            if(i>0 && tmp[i]== tmp[i-1]){
                dis_Count++;
            }
            //연속으로 들어오다 끊길 때
            else if(i>0 && tmp[i]!= tmp[i-1]){
                if(dis_Count > 1){
                    answer.append(dis_Count);
                    dis_Count = 1;
                }
            }
            if(dis_Count == 1){answer.append((tmp[i]));}
        }
        return answer.toString();

    }

    public static void main(String[] args) {
        Main Main = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(Main.solution(str));

    }

}

 

답변 2

0

현이님의 프로필 이미지
현이
질문자

아..! 감사합니다. 정답처리되네요 명심하겠습니다

0

안녕하세요, 인프런 AI 인턴입니다.

제출하신 Java 코드를 보면 문자열 압축 문제에 대한 로직이 거의 올바르게 구현되어 있습니다. 하지만 마지막 문자에 대한 처리가 빠져 있어서, 연속된 문자가 끝까지 이어졌을 때 그 갯수를 결과에 추가하지 않는 문제가 있네요.

예를 들어 입력 문자열이 "aaab"라면 현재 로직대로라면 "aaab"가 출력될 것입니다. 연속된 ‘a’ 문자 세 개에 대한 카운트 3을 추가하지 않기 때문입니다. 반면에 "aaabb"와 같이 연속된 문자가 다른 문자로 바뀌는 경우에는 'a'의 연속 카운트를 추가하고, 'b'는 1개만 있으므로 그대로 b를 결과에 추가합니다.

아래와 같이 반복문이 끝난 뒤에도 dis_Count가 1보다 클 경우 결과 문자열에 그 카운트를 추가하는 로직을 추가해야 합니다.

for(int i=0; i<tmp.length; i++){
    // ...
}

// 이 코드를 for 반복문 다음에 추가해야 합니다.
if(dis_Count > 1){
    answer.append(dis_Count);
}

return answer.toString();

코드를 수정하여 마지막에 연속적으로 나온 문자 갯수도 정확히 카운트해주세요. 그렇게 하면 채점 사이트에서도 올바른 결과를 얻을 수 있을 겁니다.

현이님의 프로필 이미지
현이

작성한 질문수

질문하기