코딩모음zip/C++

[C++] 백준코딩 5555번: 반지 문제풀이/코드/정답/해석

키윙 2023. 2. 6. 22:53

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