코딩테스트/cpp
99클럽 코테 스터디 3일차 TIL C++ 문자열 : substr, length, at
zyin
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);
}
오늘의 회고
미들러 문제도 풀고 싶었는데, 오늘은 시간이 안나서 문제를 보지도 못했다. 주말에 못푼 미들러 문제들도 다시 살펴봐야겠다.