문제
https://school.programmers.co.kr/learn/courses/30/lessons/140108
문제 분석 & 이해
해당 문제는 문제 설명그대로 진행하면 되는걸로 이해했다.
- 주어진 문자열 s 를 단어 하나씩 이동해가며 다음 문자와 비교.
- 문자와 그다음 문자가 같다면 '같은글자' +1
- 문자와 비교할 문자가 다르다면? '다른글자' +1
- 같은글자와 다른글자가 같다면 문자열을 분리한다.
-> 결과에 +1 해준다고 생각하면 된다. 지난 문자열은 비교할 필요가 없기 때문이다!
(예외 케이스!)
위의 분석처럼 진행 한다면,,, 실행은 되지만 예외가 있기 때문에 실행 결과가 다르게 나온다.
1. 더이상 비교가 불가하다면 결과에 +1 ---> (분리된후 문자열이 존재하기 때문.)
2. 혹은 결과가 0이라면 문자열 자체를 return 해야 하므로 결과에 +1
입출력 예시
s | result |
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
Solution
1-1 : one의 값이 ' ' 이면 문자열의 i 번 문자 저장.
1-2 : 저장한 문자와, 비교 문자가 같으면 same++; , 다르면 diff++;
1-3 : 두 횟수가 같아지면 result++; 후 모든 값을 초기화 (문자열을 분리하였기 때문에 다음 문자부터 다시 연산해야 하기 때문)
2-1 : same과 diff가 같지않고 더 이상 글자가 없을 때 result++ (for loop가 종료된 후.)
3-1 : 만약 문자열이 분해되지 않았다면 1 return
Code
public int solution(String s) {
int result = 0;
char one = ' ';
int same = 0;
int diff = 0;
for(int i=0; i<s.length(); i++) {
// 1-1
if(one == ' ') {
one = s.charAt(i);
}
// 1-2
if(one == s.charAt(i)) {
same++;
}else {
diff++;
}
// 1-3
if(same == diff) {
result++;
one = ' ';
same = 0;
diff = 0;
}
}
// 2-1
if(same != 0) {
result++;
}
// 3-1
//return
if(result == 0) {
result = 1;
}
return result;
}
틀린점이나 수정할 부분, 혹은 더 좋은 솔루션 공유는 언제든 환영입니다!!!
댓글에 자유롭게 말씀해주세요~
출처 : 프로그래머스(programmers)
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 나머지 한점(알고리즘) - Java (2) | 2022.12.12 |
---|---|
[프로그래머스] 최대공약수와 최대공배수(Lv1) - Java (0) | 2022.12.11 |
[프로그래머스] 명예의전당(Lv1) - Java (0) | 2022.12.08 |
댓글