Machineboy空
9996 : 한국이 그리울 땐 서버에 접속하지 - 문자열 자르기 split, substr 본문
https://www.acmicpc.net/problem/9996
문제 요약
접두사, 접미사 확인하여 같은 패턴의 문자열인지 판단
난이도
Silver 3
풀이
- '*' 구분 문자 기준 split
- 입력값과의 비교
REVIEW
1차 시도: 패턴이 3글자로 주어지는 줄 알고 s[0], s[2]와 단순 비교
2차 시도: split이용해 앞, 뒤 비교.
ab*ab로 접두사,접미사가 같을 경우를 고려하지 못함.
string.find()로 여러 개가 검출될 시, 가장 먼저 검출된 곳의 위치를 출력한다.
3차 시도: split의 기본 아이디어인 구분 문자를 기준으로 자른다는 것 활용.
c++에서는 split을 제공하지 않으므로 substr을 떠올 릴 것!
아이디어 자체가 어려운 것이 아니었음에도 문제를 잘못 읽거나, 문법이 익숙치 않아 틀리게 된다..
열심히 연마하기.
문법정리
- string.find(string) : 인덱스 반환
- 여러개 검출 시 가장 먼저 찾은 곳 반환
- string.substr(size_t pos = 0, size_t count = npos) : string 반환
- pos: 시작할 위치
- count: 몇 개 자를 건지 (생략할 경우 npos 끝까지 자름)
- string.empty() : bool 형 반환
- string == string 비교 가능
- string.length(), string.size() 둘 다 사용 가능
CODE
#include <bits/stdc++.h>
using namespace std;
int n;
string s, ori_s, pre,suf;
int main(){
cin >> n;
cin >> ori_s;
int pos = ori_s.find('*');
pre = ori_s.substr(0,pos);
suf = ori_s.substr(pos+1); // 두 번쨰 인자 안넣으면 끝까지 뽑아줌
for(int i = 0; i <n; i++){
cin >> s;
if(pre.size() + suf.size() > s.size()){
cout << "NE\n"; //반례도 꼭 !
}else{
if(pre==s.substr(0,pre.size()) && suf == s.substr(s.size()-suf.size()))
cout << "DA\n";
else cout << "NE\n";
}
}
}
'Computer > Coding Test' 카테고리의 다른 글
1620 : 나는야 포켓몬 마스터 이다솜 - map, atoi() (0) | 2024.02.01 |
---|---|
2559 : 수열 - 구간합, 슬라이딩 윈도우 (1) | 2024.01.31 |
10808 알파벳 개수 / 1159 농구경기 - 카운팅 배열과 아스키코드 변환 (0) | 2024.01.30 |
2979 트럭 주차 - 카운팅 배열 (0) | 2024.01.30 |
2309 : 일곱 난쟁이 - 순열과 조합 (0) | 2024.01.30 |