24.01.11 14:27 작성
·
217
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();
코드를 수정하여 마지막에 연속적으로 나온 문자 갯수도 정확히 카운트해주세요. 그렇게 하면 채점 사이트에서도 올바른 결과를 얻을 수 있을 겁니다.