[문제]
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
[제한사항]
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
[접근]
이 문제에서는 문자열 분리를 어떻게 구현할지가 관건이라고 생각한다.
문제를 풀때 실제로 문자를 자르진 않고 단순히 index를 이동시키는 방법으로 구현하였다.
[오류 원인 및 해결]
문자열을 실제로 자르지 않고 인덱스만을 이동시켜 for문을 돌리다보면 인덱스 범위오류가 뜨게 된다.
나는 이것을 try , catch를 사용해서 넘겼지만 그리 좋은 방법은 아닌것 같다는 생각이 든다.
[내 풀이]
class Solution {
public int solution(String s) {
int answer = 0;
int x =0 , nx = 0;
char first = s.charAt(0);
for(int i=0; i<s.length(); i++){
if(first == s.charAt(i)){x++;}
else nx++;
if(x == nx){//문자열 분해
try{
first = s.charAt(i+1);
}
catch(Exception e){
continue;
}
finally{
answer++;
x=0; nx = 0;
}
}
}
if(x != nx) answer++;
return answer;
}
}
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[JAVA,Lv.1] 옹알이(2) (0) | 2023.01.03 |
---|---|
[JAVA , Lv.1] 기사단원의 무기 (0) | 2022.12.31 |
[JAVA , Lv.1] 명예의 전당 (1) (0) | 2022.12.31 |
[JAVA , Lv.1] 가장 가까운 같은 글자 (2) | 2022.12.31 |
[JAVA , Lv.1]크기가 작은 부분 문자열 (0) | 2022.12.31 |