티스토리 뷰

PS

백준 5555. 반지

tose33 2021. 7. 31. 14:11

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
링크
«   2025/04   »
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
글 보관함