https://www.acmicpc.net/problem/11008
문제
한신이는 대학교에서 "복붙의 달인"으로 유명하다. 한신이는 타이핑 속도가 느리기 때문에 대학에서 가능한 모든 일을 복붙으로 해결한다. 그는 n개의 문자를 입력하는데 있어서 n초의 시간이 걸리지만 뛰어난 "붙여넣기" 스킬을 이용하면 어떠한 개수의 문자도 단 1초만에 타이핑 할 수 있다. 만약 한신이가 "bana"를 복사한 상태에서 "banana"를 타이핑한다면, "bana" 붙여넣기 1초, 'n' 입력, 'a' 입력으로 총 3초가 걸린다. 한신이가 클립보드에 저장한 p를 알고 있을 때 s를 입력하는데 걸리는 최소 시간을 계산해보자!
입력
첫 번째 줄에는 테스트케이스의 개수 T(T ≤ 25)가 입력된다. 각 테스트케이스는 한 줄에 2개의 문자열 s와 p가 공백으로 구분되어 입력되며 한신이는 p를 복사하여 s를 만들어 내는 것을 목표로 한다. s의 최대 길이는 10,000이고, p의 최대 길이는 100이다.
2
banana bana
asakusa sa
예제의 경우 테스트케이스가 2이고
테스트케이스 첫번쨰의 경우
s가 banana , p가 bana이다.
p 문자열 bana를 복사해서 붙이면 bana가 되고 시간은 1초가 된다.
그 이후 n과 a를 타이핑하면 1+2 -> 3초가 걸린다.
테스트케이스 두번째의 경우
s가 asakusa, p가 sa이다.
이 경우 a를 타이핑하고 sa를 복사 붙여넣기, k,u 타핑,sa복사 붙여넣기를 하면 5초가 걸린다.
#include <iostream>
#include <string>
using namespace std;
int main(void){
int t;
cin >> t;
while(t--){
string s,p;
cin >> s >> p;
int cnt = 0;
for(int i = 0;i<s.size();i++){
string temp = "";
if(i+p.size()<=s.size()){ //i+p문자열의 길이가 s문자열의 길이를 넘어가면 안됌
/*i부터 i+p문자열의 모든 문자를 temp에 더해줌 */
for(int j = i;j<i+p.size();j++){
temp = temp + s[j];
}
/*같은 문자열이라면 1초 증가 + p문자열길이 -1만큼 이동 */
if(temp == p){
cnt++;
i = i + p.size()-1;
}
/*다른 문자열이라면 1초 증가 */
else{
cnt++;
}
}
/*i+p문자열의 길이가 s문자열의 길이를 넘어가면 1초 증가*/
else{
cnt++;
}
}
cout << cnt << '\n';
}
}
'알고리즘' 카테고리의 다른 글
백준 1303 전쟁 C++ (0) | 2022.06.08 |
---|---|
백준 24479 C++ (0) | 2022.06.06 |
백준 18429 근손실 C++ (0) | 2022.06.04 |
cin getline과 cin.ignore(), cin.fail(), cin.clear() (0) | 2022.06.04 |
백준 14405 피카츄 C++ (0) | 2022.05.30 |