항해 99클럽 코테

99클럽 코테 스터디 3일차 TIL

metamong-data 2024. 10. 30. 17:01
728x90
반응형

오늘의 학습 키워드

문자열

과제

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

  • 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
  • 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
  • s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
  • 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.

문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.

풀이 과정

  1. 첫 글자를 x로 지정 후 x의 등장 횟수와 x가 아닌 다른 글자들의 등장 횟수 변수 선언
  2. 현재 위치부터 문자열을 순회
  3. x의 개수와 다른 글자들의 개수가 같아지면 break하고 answer+=1
  4. 문자열 끝에 도달했을 때 +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