https://www.acmicpc.net/problem/5555
5555번: 반지
당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을
www.acmicpc.net
풀이 key
- find 함수를 이용해서 풀 수 있다. (algorithm의 find함수와는 다르다. 여기서 사용하는 것은 string의 find함수.)
코드 해석
- ring += ring : 반지는 둥글기 때문에 이어서 읽을 수 있으므로 ring += ring을 통해 한 바퀴의 문자열을 만든다.
- ring.find(tofind) : ring이라는 문자열에서 tofind라는 문자열을 찾아내기 위한 find함수 이용한다.
- ring.find(tofind) != string::npos : find 함수가 문자열을 찾지 못했다면 string::npos를 반환한다. (문자열을 찾았다면 해당 문자열의 시작 위치를 리턴한다.)
정답 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tofind;
string ring;
int n;
int cnt = 0;
cin >> tofind;
cin >> n;
for(int i=0; i<n; i++)
{
cin >> ring;
ring += ring;
if(ring.find(tofind) != string::npos)
cnt++;
}
cout << cnt;
}
지식 확장
- s.find('a') : s의 처음부터 a라는 단일 문자를 찾는다.
- s.find("abc", 3) : s의 3번째부터 문자열 abc를 찾는다.
'코딩모음zip > C++' 카테고리의 다른 글
[C++] 백준 5363번 : 요다 문제풀이/정답/코드 (0) | 2023.03.02 |
---|