티스토리 뷰
https://www.acmicpc.net/problem/5555
5555번: 반지
당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을
www.acmicpc.net
특정 문자열이 다른 문자열에 속하는지 판단하는 문제인데
문자열은 시작과 끝이 이어져 있으므로 단순히 string의 find 함수로는 힘들것 같다.
1. 문자열의 처음부터 끝까지 탐색하면서 찾는 문자열의 첫 글자와 일치하는 지점을 찾는다.
2. 찾은 지점에서부터 찾는문자열의 크기만큼 글자들을 비교한다.
이때 문자열의 인덱스를 str[i % 10] 이런 식으로 해주면 범위가 문자열의 크기보다 커지면 0으로 돌아오도록 해서
시작과 끝이 이어져있는 문자들도 찾을수 있다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string target;
int n;
int ans = 0;
vector<string> v;
int main()
{
cin >> target;
cin >> n;
for(int i = 0; i < n; i++)
{
string temp;
cin >> temp;
v.push_back(temp);
}
// n번 반복
for(int tc = 0; tc < n; tc++)
{
// 하나의 문자열에 대해 계산,
for(int i = 0; i < v[tc].size(); i++)
{
// 문자열에서 target 문자열의 첫 단어와 일치하는 지점을 찾는다
if(v[tc][i] == target[0])
{
bool flag = true;
int target_idx = 1;
for(int j = i+1; j < i+target.size(); j++)
{
// % 연산자로 범위가 문자열의 크기보다 커지면 0으로 돌아오도록함
if(v[tc][j % v[tc].size()] != target[target_idx])
{
flag = false;
break;
}
target_idx++;
}
// flag가 true라면 찾는 문자열이 있으므로 ans++
if(flag)
{
ans++;
break;
}
}
}
}
cout << ans;
}
'PS' 카테고리의 다른 글
백준 11502. 세 개의 소수 문제 (0) | 2021.07.31 |
---|---|
백준 11170. 0의 개수 (0) | 2021.07.31 |
백준 2851. 슈퍼 마리오 (0) | 2021.07.30 |
백준 1747. 소수&팰린드롬 (0) | 2021.07.30 |
백준 1254. 팰린드롬 만들기 (0) | 2021.07.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++
- binary search
- Dijkstra
- 자료구조
- Kruskal
- graph
- Stack
- Unity
- priority queue
- 조합
- DP
- greedy
- permutation
- Python
- 이분탐색
- MVC
- db
- BFS
- Tree
- Brute Force
- CSS
- floyd warshall
- Implementation
- 재귀
- Spring
- dfs
- two pointer
- recursion
- C
- back tracking
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함