728x90
반응형
오늘의 학습 키워드
문자열
과제
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
풀이 과정
- 첫 글자를 x로 지정 후 x의 등장 횟수와 x가 아닌 다른 글자들의 등장 횟수 변수 선언
- 현재 위치부터 문자열을 순회
- x의 개수와 다른 글자들의 개수가 같아지면 break하고 answer+=1
- 문자열 끝에 도달했을 때 +1 하고 끝내기
제출 코드 (python)
def solution(s):
answer = 0
start = 0
while start < len(s):
x = s[start]
x_count = 0
other_count = 0
for i in range(start, len(s)):
if s[i] == x:
x_count += 1
else:
other_count += 1
if x_count == other_count:
answer += 1
start = i + 1
break
if i == len(s) - 1:
answer += 1
start = len(s)
return answer
다른 언어로 문제 풀기
C언어
int solution(const char* s) {
int answer = 0;
int start = 0;
int len = strlen(s);
while (start < len) {
char x = s[start];
int x_count = 0;
int other_count = 0;
for (int i = start; i < len; i++) {
if (s[i] == x) x_count++;
else other_count++;
if (x_count == other_count) {
answer++;
start = i + 1;
break;
}
if (i == len - 1) {
answer++;
start = len;
}
}
}
return answer;
}
C++
int solution(string s) {
int answer = 0;
int start = 0;
while (start < s.length()) {
char x = s[start];
int x_count = 0;
int other_count = 0;
for (int i = start; i < s.length(); i++) {
if (s[i] == x) x_count++;
else other_count++;
if (x_count == other_count) {
answer++;
start = i + 1;
break;
}
if (i == s.length() - 1) {
answer++;
start = s.length();
}
}
}
return answer;
}
오늘의 회고
- 문제를 푸는데 집중하고 난 후에 최적화 하는 방향으로 해야겠다!
- 여러가지 언어를 이용해서 풀어보고, 이해하자!
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12916
728x90
'항해 99클럽 코테' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL (1) | 2024.11.02 |
---|---|
99클럽 코테 스터디 5일차 TIL (0) | 2024.11.01 |
99클럽 코테 스터디 4일차 TIL (1) | 2024.10.31 |
99클럽 코테 스터디 2일차 TIL (0) | 2024.10.29 |
99클럽 코테 스터디 1일차 TIL (0) | 2024.10.29 |