안녕하세요.
65회차 과제 문자열 나누기입니다.
문제
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
0
먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
제한 사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
풀이
class Solution {
public int solution(String s) {
char firstS = ' ';
int answer = 0;
int firstCnt = 0;
int otherCnt = 0;
for (int i=0; i<s.length(); i++) {
// 첫 글자를 확인
if(firstCnt == 0) {
firstS = s.charAt(i);
firstCnt++;
continue;
}
// 두 번째 글자가 첫 글자와 같은지 확인
// 같으면 firstCnt++, 다르면 otherCnt++
if(firstS == s.charAt(i)) {
firstCnt++;
} else {
otherCnt++;
}
// firstCnt와 otherCnt가 같은지 확인
// 같으면 초기화하고 answer ++
if(firstCnt == otherCnt) {
firstCnt = 0;
otherCnt = 0;
answer++;
}
}
// 짝이 맞지 않은 마지막 문자가 있는 경우 answer++
if(firstCnt != otherCnt) {
answer++;
}
return answer;
}
}
다른 사람의 풀이
class Solution {
public int solution(String s) {
char prev = '1';
int same = 0, different = 0, answer = 0;
for (char c : s.toCharArray()) {
if (prev == '1') {
prev = c;
same++;
answer++;
} else if (prev == c) {
same++;
} else {
different++;
}
if (same == different) {
prev = '1';
same = 0; different = 0;
}
}
return answer;
}
}
Learned
오늘도 너무 꼬아서 가는 부분이 없지않아 있던 것 같습니다.
언제쯤이면 길이 꼬이지 않고 쭉 펴질지... ㅠㅠ
저처럼 개발을 처음 접하시는 분들에게 이 글이 조금이나마 도움이 되길 바랍니다.
'내일배움캠프 > Daily Routine (알고리즘)' 카테고리의 다른 글
[내일배움캠프] 알고리즘 Daily Routine 66. 대충 만든 자판 (0) | 2024.12.03 |
---|---|
[내일배움캠프] 알고리즘 Daily Routine 64. 체육복 (0) | 2024.11.14 |
[내일배움캠프] 알고리즘 Daily Routine 63. 숫자 짝꿍 (0) | 2024.11.12 |
[내일배움캠프] 알고리즘 Daily Routine 62. 옹알이(2) (1) | 2024.11.11 |
[내일배움캠프] 알고리즘 Daily Routine 61. 로또의 최고 순위와 최저 순위 (0) | 2024.11.01 |
댓글