프로그래머스 레벨 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);
}
}