💬 문제 설명
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
🚫 제한 사항
- ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
📢 입출력 예
👨🏫 입출력 예 설명
📃 제출 코드
class Solution {
public int solution(String s) {
int answer = 0;
char standard = s.charAt(0);
int sameCount = 0;
int anotherCount = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == standard) {
sameCount++;
} else {
anotherCount++;
}
if (sameCount == anotherCount) {
answer++;
if (i + 1 < s.length()) {
standard = s.charAt(i + 1);
}
sameCount = 0;
anotherCount = 0;
}
}
if (sameCount != anotherCount) answer++;
return answer;
}
}
✏ 해결방법 & 배운점
- 초기화:
- answer: 분리된 문자열의 개수를 저장하는 변수로 초기값은 0입니다.
- standard: 현재 기준이 되는 문자로 초기값은 s의 첫 번째 문자입니다.
- sameCount: 기준 문자와 같은 문자의 개수를 셉니다.
- anotherCount: 기준 문자와 다른 문자의 개수를 셉니다.
- 문자열 순회:
- 문자열 s를 처음부터 끝까지 순회합니다.
- 기준 문자와 비교:
- 현재 문자가 기준 문자(standard)와 같으면 sameCount를 증가시킵니다.
- 그렇지 않으면 anotherCount를 증가시킵니다.
- 문자열 분리 조건:
- sameCount와 anotherCount가 같아지면 현재까지의 부분 문자열이 완성된 것입니다.
- answer를 증가시키고, 다음 부분 문자열을 처리하기 위해 기준 문자와 카운터들을 초기화합니다.
- 만약 다음 문자가 남아있다면, 새로운 기준 문자를 설정합니다.
- 남은 문자 처리:
- 문자열 순회가 끝났을 때 sameCount와 anotherCount가 같지 않으면 마지막 부분 문자열을 추가합니다.
- 결과 반환:
- 분리된 문자열의 개수를 반환합니다.
제출코드 수정
class Solution {
public int solution(String s) {
int answer = 0;
int cnt = 0;
char prev = '0';
for (char ch : s.toCharArray()) {
if (prev == '0') {
prev = ch;
}
if (prev == ch) {
cnt ++;
}
if (prev != ch) {
cnt--;
}
if (cnt == 0) {
answer++;
prev = '0';
}
}
if (cnt > 0) answer++;
return answer;
}
}
'PS > LV.1 프로그래머스 문제' 카테고리의 다른 글
[프로그래머스] LV.1 대충 만든 자판 - Java [64/80] (0) | 2024.07.28 |
---|---|
[프로그래머스] LV.1 둘만의 암호 - Java [63/80] (0) | 2024.07.27 |
[프로그래머스] LV.1 로또의 최고 순위와 최저 순위 - Java [61/80] (0) | 2024.07.27 |
[프로그래머스] LV.1 [1차] 다트게임 - Java [60/80] (0) | 2024.07.26 |
[프로그래머스] LV.1 옹알이(2) - Java [59/80] (0) | 2024.07.26 |