해결된 질문
작성
·
99
0
안녕하세요 딩코님!
1주차 숙제에서 추가로 주신 문자열 요약해보기를 풀었는데
JAVA로 진행중입니다!
// 아스키코드 방식
public static StringBuffer summarizeString(String str) {
int[] strArr = new int[26];
for(int i =0;i<str.length();i++){
int index = (int)str.charAt(i) - (int)'a';
strArr[index] += 1;
}
StringBuffer strbuf = new StringBuffer();
for(int i =0;i<strArr.length;i++){
if(strArr[i] > 0){
strbuf.append((char)(i+(int)'a')).append(strArr[i]+ " ");
}
}
return strbuf;
}
public static void main(String[] args) {
String inputStr = "acccdeee";
System.out.println(summarizeString(inputStr));
}
// 문자열 뒤집기 방식
public static StringBuffer summarizeString(String str) {
int count = 0;
StringBuffer strBuf = new StringBuffer();
for(int i = 0;i < str.length() - 1; i++){
if(str.charAt(i) == str.charAt(i+1)){
count++;
}else{
strBuf.append(str.charAt(i)).append(count + 1).append("/");
count = 0;
}
}
strBuf.append(str.charAt(str.length() - 1)).append(count + 1);
return strBuf;
}
public static void main(String[] args) {
String inputStr = "acccdeee";
System.out.println(summarizeString(inputStr));
}
저는 아스키 코드를 사용해서 풀었는데 딩코님이 적어주신 답안지를 보니 바로 전에 풀어본
문자열 뒤집기와 유사하게 풀이를 해주셨더라구요
그래서 그걸 참고해서 작성해보니 둘다 똑같이 시간복잡도는 O(n)의 성능을 가지고있는거같고
다른점은 아스키 코드형식은 무조건 결과값이 abc순으로 출력이되고
문자열뒤집기 방식은 입력받은 순서대로 나오는거말고는 다른점은 찾을수가없었습니다.
해당 문제는 해설영상이 없어서 혹시 제가 문제를 이해못해서 잘못 작성한건가 해서 질문남깁니다!
이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
답변 1
1
안녕하세요 영욱님! 좋은 질문 감사합니다
문자열 요약 문제에 관한 두 가지 접근법 모두 유효합니다. 이 문제의 핵심은 입력값의 조건을 정확히 이해하는 것이라고 생각됩니다
"입력으로 소문자의 알파벳 순으로 정렬된 문자열이 입력됩니다"라는 입력값의 조건 때문에, 두가지 풀이 방법 모두 훌륭한 해결 방법입니다!
연속 문자 카운팅 방식: 문제의 예시와 의도에 가장 부합하는 방식으로, 연속된 같은 문자의 개수를 세어 표현합니다.
아스키코드(전체 카운팅) 방식: 입력 문자열이 이미 알파벳 순으로 정렬되어 있기 때문에, 이 방식도 결과적으로 요구사항을 충족합니다.
이처럼 문제 해결 시 입력값의 특성과 조건을 잘 활용하면 다양한 접근법이 가능해집니다. 알고리즘 문제를 풀 때는 문제의 제약조건과 가정을 정확히 파악하는 것이 중요합니다. 두 방식 모두 O(n)의 시간복잡도를 가지며 효율적인 해결책을 제시하셨습니다.
결국 문제 해결의 다양성을 보여주는 좋은 예시라고 할 수 있습니다. 동일한 결과를 얻더라도 문제의 조건과 상황에 따라 여러 가지 접근법이 가능하다는 점을 잘 보여주고 있습니다!
영욱님께서 자바로 문제를 새롭게 풀어보시고, 또 여러 고민을 해주시는 모습 넘넘 좋습니다!! 언제든 편하게 질문해주시고 좋은 하루 되시길 바랍니다!!