문제
https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 개요
주어진 문자열 s를 특정 규칙에 따라 여러 부분 문자열로 분해하고, 분해된 문자열의 개수를 반환하는 문제입니다. 분해 규칙은 다음과 같습니다:
- 첫 글자를 기준으로 두 종류의 문자(x, x가 아닌 다른 문자)의 등장 횟수를 비교합니다.
- 두 종류의 문자 등장 횟수가 같아지는 순간 문자열을 분리합니다.
- 분리 후 남은 문자열에 대해 같은 과정을 반복합니다.
- 남은 문자열이 없다면 종료합니다.
접근 방법
- 초기화 및 설정
- 첫 글자를 기준으로 문자 x를 설정합니다.
- x의 개수를 세는 변수 cnt와 x가 아닌 문자의 개수를 세는 변수 diff를 초기화합니다.
- 결과로 반환할 분리된 문자열의 개수를 저장할 변수 answer를 초기화합니다.
- 문자열 순회
- 문자열을 왼쪽에서 오른쪽으로 순회하며 현재 문자가 x와 같으면 cnt를 증가시키고, 다르면 diff를 증가시킵니다.
- cnt와 diff가 같아지면 현재까지의 문자열을 하나의 부분 문자열로 분리합니다.
- 이때, answer를 증가시키고 cnt, diff, x를 초기화하여 다음 부분 문자열 탐색을 시작합니다.
- 반복 종료
- 문자열 순회가 종료되었을 때, 아직 분리되지 않은 문자열이 남아 있다면 이를 하나의 부분 문자열로 간주하여 answer에 1을 더합니다.
코드
class Solution {
public int solution(String s) {
int answer = 0; // 결과 문자열 개수
int cnt = 1; // x의 개수
int diff = 0; // x가 아닌 다른 문자 개수
char cur = s.charAt(0); // 현재 기준 문자 x
// 문자열 순회
for (int i = 1; i < s.length(); i++) {
// cnt와 diff가 같아지면 문자열 분리
if (cnt == diff) {
answer++;
cnt = 1;
diff = 0;
cur = s.charAt(i);
continue;
}
// 문자 일치 여부에 따라 카운트
if (cur == s.charAt(i)) {
cnt++;
} else {
diff++;
}
}
return answer + 1; // 마지막 남은 문자열 포함
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 4번 / 수식 복원하기 - Java (0) | 2024.11.26 |
---|---|
[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기도움말 - Java (0) | 2024.11.26 |
[프로그래머스] 달리기 경주 - Java (1) | 2024.11.24 |
[프로그래머스] 멀쩡한 사각형 - Java (0) | 2024.11.23 |
[프로그래머스] 가장 큰 정사각형 찾기 - Java (0) | 2024.11.22 |