기록

99클럽 코테 스터디 3일차 TIL C++ 문자열 : substr, length, at 본문

코딩테스트/cpp

99클럽 코테 스터디 3일차 TIL C++ 문자열 : substr, length, at

youngyin 2024. 10. 31. 00:56

오늘의 학습 키워드

(1) 문제1 : 문자열
: https://school.programmers.co.kr/learn/courses/30/lessons/140108

공부한 내용 본인의 언어로 정리하기

문제1 : 문자열

 

(1) "x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다."의 해석

이 문제를 처음보고, aabcd라는 문자열이 있을 때 아래처럼 세야 한다고 이해했다. 아래처럼 풀어도 (20241031)현재 기준의 테스트 케이스를 문제없이 통과한다. 

  a의 출현횟수 b의 출현횟수 c의 출현횟수 d의 출현횟수
a 1      
a 2      
b 2 1    
c 2 1 1  
d 2 1 1 1

 

그러나, 제출 후에 50%이상의 테스트 케이스에 실패했다. 이 문제는 아래처럼 해석되어야 한다. (각각이라는 키워드를 빼는 것이 조금 더 정확한 표현인 것 같다. )

  x의 출현빈도 x가 아닌 것의 수 분할여부
a 1 0 N
a 2 0 N
b 2 1 N
c 2 2 Y
d 1 0 Y

 

 

(2) 전체 풀이

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int sol(string s, int ans){
    int x=0;
    int not_x=0;

    for (int i=0;i<s.length();i++){
        if (s.at(0) == s.at(i)) x++;
        else not_x++;

        if (not_x>0 && (x==not_x)) 
            return sol(s.substr(i+1, s.length()-i), ans+1); 
    }

    if (s.length() == 0) return ans;
    return ans+1;
}

int solution(string s) {
    return sol(s, 0);
}

오늘의 회고

미들러 문제도 풀고 싶었는데, 오늘은 시간이 안나서 문제를 보지도 못했다. 주말에 못푼 미들러 문제들도 다시 살펴봐야겠다.

Comments