문제
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
맨앞의 문자를 기준으로 다른 문자와 비교해서 개수가 같아질 때, 문자열을 자를 때 개수를 구하는 문제이다.
필자는 이 문제에서 substring 메서드를 사용해서, 자른 문자열을 없애려고 했으나, 문자열의 길이가 10000인 것과 새로운 String 객체를 만드는 것이 많은 메모리 사용량이 있다고 생각했다.
그래서 4개의 변수를 사용해서 문자열을 자르고 갱신하지 않고 풀이했다.
1. 현재 문자, 같은 문자의 개수, 다른 문자의 개수, 현재 인덱스에 대한 변수를 선언한다.
2. 현재 문자를 가져오고, 같은 문자의 개수 1개, 다른 문자의 개수 0개, 현재 문자를 가져왔으므로, 인덱스를 1 증가한다.
3. 같은 문자의 개수와 다른 문자의 개수가 같아질때까지, 인덱스를 이동해서 계속센다.
하지만, 같은 문자의 개수와 다른 문자의 개수가 같아지지 않을 경우도 있어서 두가지 경우에 대해 생각해서 while문을 수행한다.
잘려졌다는 의미는 개수가 같아졌다는 의미이다. 그때는 boolean 변수를 하나 둬서 잘렸는지 여부를 체크한다.
4. 잘려졌다면 개수를 세고 다음 인덱스에서 문자를 가져오고 개수를 초기화해서 다시 잘라본다.
5. 마지막 덩어리는 세지 못했으므로 1을 더해서 리턴한다.
소스코드
class Solution {
public int solution(String s) {
int answer = 0;
char ch = ' ';
int sameCnt = 0;
int otherCnt = 0;
int idx = 0;
while (idx < s.length()) {
ch = s.charAt(idx);
sameCnt = 1;
otherCnt = 0;
idx++;
boolean isCut = false;
while (idx < s.length()) {
if (sameCnt == otherCnt) {
isCut = true;
break;
}
if (ch == s.charAt(idx)) {
sameCnt++;
} else {
otherCnt++;
}
idx++;
}
if (isCut) {
answer++;
}
}
return answer + 1;
}
}
실행결과


'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] 기사단원의 무기 - Java (0) | 2025.08.05 |
|---|---|
| [Programmers] 명예의 전당 (1) - Java (0) | 2025.08.04 |
| [Programmers] 제일 작은 수 제거하기 - Java (0) | 2025.08.02 |
| [Programmers] 두 개 뽑아서 더하기 - Java (0) | 2025.08.01 |
| [Programmers] 햄버거 만들기 - Java (0) | 2025.07.31 |