쌓고 쌓다
[프로그래머스] 크기가 작은 부분 문자열 C++ 풀이 및 해설 본문
https://school.programmers.co.kr/learn/courses/30/lessons/147355
풀이 방법
- t의 문자열을 하나하나 반복문으로 돌며 p와 비교할 부분 문자열을 만든다.
- 현재 만들어진 부분 문자열의 길이가 p보다 작다면
- 부분 문자열에 t의 i번째 문자열을 붙인다.
- 현재 만들어진 부분 문자열의 길이가 p와 동일하다면
- 부분 문자열이 p보다 작거나 같은지 확인하여, 만족한다면 answer++ 해준다.
- 그리고 현재 반복문의 i를 가지고 t의 i번째 문자를 부분 문자열에 붙인다.
- 부분 문자열의 맨 앞 문자는 지운다.
- 반복문을 다 돌았다면 마지막으로 부분 문자열을 가지고 크기 비교를하여 answer++ 할지말지 결정하자.
- 왜냐. 반복문을 다 돌았을때 마지막 문자를 추가하고 반복문을 탈출한 상태이기때문에 마지막 검증이 필요함.
전체 코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string t, string p) {
int answer = 0;
string str = "";
for(int i=0; i<t.length(); i++) {
if(str.length()<p.length()) { // p의 길이에 못미치면
str+=t[i]; // i번째 수 붙이기
} else if (str.length()==p.length()) { // p의 길이가 되었다면
if(stoll(str)<=stoll(p)) { // p보다 작거나 같다면
answer++;
}
str+=t[i]; // i번째 수를 붙이고
str.erase(str.begin()); // 첫번째 수를 제거하고
}
}
if(stoll(str)<=stoll(p)) { // 위의 반복문에서 t의 마지막 문자열을 붙이고 검증 안하고 탈출하므로. 마지막 검증 필요
answer++;
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 가까운 같은 글자 C++ 풀이 및 해설 (1) | 2023.10.06 |
---|---|
[프로그래머스] 삼총사 C++ 풀이 및 해설 (0) | 2023.10.02 |
[프로그래머스] 시소 짝꿍 C++ 풀이 및 해설 (0) | 2023.09.22 |
[프로그래머스] 숫자 카드 나누기 C++ 풀이 및 해설 (0) | 2023.09.19 |
[프로그래머스] 마법의 엘리베이터 C++ 풀이 및 해설 (0) | 2023.09.13 |
Comments