https://school.programmers.co.kr/learn/courses/30/lessons/140108#qna
문제 접근
문제를 잘못 해석해서 처음에 풀이가 완전 다른 쪽으로 나아갔다.
핵심은 첫 문자 x와 x가 아닌 문자들의 횟수를 세야한다는 거다. [ 분해된 문자열에서도 다시 그 첫 문자를 기준으로 x와 x가 아닌 문자들로 나뉜다. ]
첫 문자 x는 시작부터 횟수가 1올라가니 xCount에 1을 넣고 시작했다.
문자열의 첫 문자도 firstWord 변수에 대입하고 for문이 0부터 시작하지 않도록 했다.
xCount와 dxCount가 같아지면 for문을 바로 빠져나가고 xCount, dxCount를 합친 수 만큼 s문자열을 자름
ex) s = s.substring(2) → 문자열 s의 인덱스 0부터 1까지 자르고 남은 부분을 s에 다시 넣음
남은 문자열이 1개인 경우도 while 반복문 처음으로 돌아가서 answer++ 시켜주고 for문에서 조건이 맞지않아 실행되지 않으며, 마지막 substring에서 문자열 길이는 0이되고 while문을 빠져나가 answer를 return 시켜준다.
class Solution {
public int solution(String s) {
int answer = 0;
while(s.length()>=1) {
answer++; // "분해한" 문자열의 갯수를 구해야 된다.
// 한 번 분해하면 문자열은 2개가 되기에 처음에 먼저 1더해주고 시작한다.
int xCount = 1; // 첫 글자니까 1부터 시작
int dxCount = 0;
char firstWord = s.charAt(0);
for(int i=1; i<s.length(); i++) {
// 첫 글자(x) 박고 시작
if(s.charAt(i) == firstWord) xCount++;
else dxCount++;
if (xCount == dxCount) break;
}
s = s.substring((xCount+dxCount)); // 남은 문자가 1개일 경우 반복문은 돌아가지 않기에 반복문 밖에 작성
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 과일 장수 / JAVA] (0) | 2023.01.18 |
---|---|
[프로그래머스 / 명예의 전당 (1) / JAVA] (0) | 2023.01.13 |
[프로그래머스 / 가장 가까운 같은 글자 / JAVA ] (0) | 2023.01.09 |
[프로그래머스 / 크기가 작은 부분 문자열 / JAVA ] (0) | 2023.01.08 |
[프로그래머스 / 기사단원의 무기 / JAVA ] (1) | 2023.01.05 |
댓글