[문제풀이] 01-11. 문자열 압축

𝒄𝒉𝒂𝒏𝒎𝒊𝒏·2023년 10월 24일
0

인프런, 자바(Java) 알고리즘 문제풀이

String(문자열) 다루기 - 0111. 문자열 압축


🗒️ 문제


🎈 나의 풀이

	private static String solution(String str) {
        String answer = "";

        for(int i=0; i<str.length(); i++) {
            int cnt = 1;

            while(i<str.length() - 1) {
                if(str.charAt(i) == str.charAt(i+1)) {
                    i++;
                    cnt++;
                }
                else break;
            }

            answer += str.charAt(i);
            if(cnt != 1) answer += cnt;
        }

        return answer;
    }

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


🖍️ 강의 풀이

    private static String solution(String str) {
        String answer = "";
        str += " ";
        int cnt = 1;

        for(int i=0; i<str.length() - 1; i++) {
            if(str.charAt(i) == str.charAt(i+1)) cnt++;
            else {
                answer += str.charAt(i);
                if(cnt > 1) {
                    answer += cnt;
                    cnt = 1;
                }
            }
        }

        return answer;
    }

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


💬 짚어가기

나의 풀이는 중첩 반복문을 통해 for문 내부에 while문으로 문자열을
순회하도록 구현하였다. 이 때 증감을 보관하는 변수 i는 조건에 따라
두 반복문에서 동시에 값이 증가하여 불필요한 순회를 줄인다.


강의에서는 하나의 반복문을 통해 나의 풀이와 동일하게 동작하도록 구현했다.
강의의 방식이 좀 더 간결하고 메모리 사용에 더 효율적인 것 같다.

profile
𝑶𝒏𝒆 𝒅𝒂𝒚 𝒐𝒓 𝒅𝒂𝒚 𝒐𝒏𝒆.

0개의 댓글