본문 바로가기
알고리즘 문제풀이

[알고리즘/인프런]1-11 문자열 압축(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의)

by jeonghaemin 2021. 5. 9.
728x90

인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다.

내 풀이

public  String mySolution(String s) {
        StringBuilder sb = new StringBuilder();

        int count = 1; //반복 횟수
        char prev = 0; //반복 문자

        for (int i = 0; i < s.length(); i++) {
            //직전의 문자와 같은 문자라면
            if (prev == s.charAt(i)) {
                count++;
                continue;
            }

            //직전에 반복되는 문자가 있었다면, 문자의 개수를 문자열에 추가
            if (count > 1) {
                sb.append(count);
            }

            sb.append(s.charAt(i));
            prev = s.charAt(i);
            count = 1;
        }

        //마지막까지 반복된 문자가 있을 수 있기때문에
        if (count > 1) {
            sb.append(count);
        }

        return sb.toString();
    }

강의 풀이

  • 문자열의 끝에 공백 문자를 하나 추가하여 좀 더 깔끔한 풀이
public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        s = s+" "; //반복문의 마지막 i에서 i+1시에 인덱스 범위를 넘는 상황 방지
        int count = 1;

        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) == s.charAt(i + 1)) {
                count += 1;
            } else {
                sb.append(s.charAt(i));
                if (count > 1) {
                    sb.append(count);
                }
                count = 1;
            }
        }

        return sb.toString();
    }

댓글