[프로그래머스] 문자열 나누기

이찬혁·2024년 5월 10일

알고리즘

목록 보기
60/72

프로그래머스 Lv2 - 문자열 나누기 문제

프로그래머스 레벨 2 문자열 나누기 문제를 풀이했다.

처음에는 중간 중간 x와 x가 아닌 개수가 같아지는 경우가 될 때마다 문자열을 잘라서 다시 반복해야하나 생각했지만 자르지 않고도 필요한 변수의 값을 재설정하면 될 것 같아 아래 로직과 같이 풀이를 완료했다.
(String과 같은 Java에서 특별한 객체나 다른 객체 비교시 ==이 아닌 .equals() 비교 주의!!)

StringDivide.java

package com.example.Programmers.Lv2;

public class StringDivide {
    public int solution(String s) {
        int answer = 1;
        String sArr[] = s.split("");
        String x = sArr[0];
        int xCnt = 1;
        int notXCnt = 0;

        // 문자열을 한글자씩 나눈 배열을 반복문을 통해 순회
        for (int i = 1; i < sArr.length; i++) {
            // x의 개수와 x가 아닌 문자의 개수가 같아지게 된다면 정답 1 증가 및 다음 반복에 필요한 값 재설정
            if (xCnt == notXCnt) {
                answer++;
                xCnt = 0;
                notXCnt = 0;
                x = sArr[i];
            }
            String str = sArr[i];
            if (x.equals(str)) {
                xCnt++;
            } else {
                notXCnt++;
            }

        }
        return answer;
    }
}

StringDivideTest.java

package com.example.Programmers.Lv2;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class StringDivideTest {
    @Test
    public void testStringDivide() {
        StringDivide s = new StringDivide();

        int result1 = s.solution("banana");
        int result2 = s.solution("abracadabra");
        int result3 = s.solution("aaabbaccccabba");

        assertEquals(3, result1);
        assertEquals(6, result2);
        assertEquals(3, result3);

    }
}
profile
나의 개발로그

0개의 댓글