-
[백준] 9996 한국이 그리울땐 서버에 접속하지, substr , find, length , string 사용방법알고리즘/백준 2023. 5. 19. 19:45
https://www.acmicpc.net/problem/9996
9996번: 한국이 그리울 땐 서버에 접속하지
총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.
www.acmicpc.net
[9996번: 한국이 그리울 땐 서버에 접속하지]
총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.
*을 기준으로 좌우 문자열이 입력받은 문자열에 대해서 모두 존재하는지를 묻는 문제이다.
다음은 문제 해결을 위해 사용한 멤버함수 이다.
find('*') : 해당 문자열이 어느 인덱스에 있는지 반환해주는 함수
substr (시작위치, 종료위치) : 시작 위치에서 종료 지점까지 문자열을 잘라주는 함수. 종료위치를 적지않으면, 시작 위치부터 끝 점까지 잘라주는 함수이다.
length () : 문자열의 길이를 반환해주는 함수.
조건 1.
왼쪽 문자열과 오른쪽 문자열의 길이의 합은 입력받은 문자열의 길이보다 길어야 한다.
예를들어
b*b
b 를 입력 받았을때 양쪽에 b는 만족하지만, 실제로는 한쪽만 b가 있기 때문에 다음과 같은 조건을 설정했다.
if(left.length()+right.length() > m.length()) cout <<"NE";
조건 2.
왼쪽 문자열과 오른쪽 문자열이 입력받은 문자열에 존재하는지를 판단하기 위한 조건이다.
if(left == m.substr(0,left.size()) && right == m.substr(m.size()-right.size())) cout <<"DA";
앞에서 조건 1에서 길이가 맞지 않을때 예외처리를 해주었기 때문에 2번째에서는 좌우가 같은지만 확인하면 된다.
아래는 전체 코드이다.
#include <iostream> #include <vector> #include <string> using namespace std; typedef long long ll; int main() { string s,left,right; vector<string> v ; int n ; cin >> n >> s; size_t found = s.find('*'); // *을 기준으로 왼쪽 오른쪽 문자열을 분할 left = s.substr(0,found); right = s.substr(found+1); for(int i=0; i<n; i++) { string compare ; cin>> s; v.push_back(s); } for(auto m: v) { if(left.length()+right.length() > m.length()) cout <<"NE"; else { if(left == m.substr(0,left.size()) && right == m.substr(m.size()-right.size())) cout <<"DA"; else cout <<"NE"; } cout<<"\n"; } }
'알고리즘 > 백준' 카테고리의 다른 글
백준 4375 : 1. 모듈러 연산 2 (0) 2023.08.31 백준 1629 곱셈 , 모듈러 연산 , 재귀함수 (0) 2023.08.31 unordered_map 사용방법, c++ 시간단축코드 , stoi , 입력값 정수인지 문자열인지 구분하기 , 백준 1620, 나는야 포켓몬 마스터 이다솜 (0) 2023.08.29