๐Ÿ•๏ธ ICPC Sinchon/Bruteforce

[BOJ S4][C++] ๋ฐฑ์ค€ 1544๋ฒˆ: ์‚ฌ์ดํด ๋‹จ์–ด

์„ ๋‹ฌ 2022. 9. 21. 01:53
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1544

 

1544๋ฒˆ: ์‚ฌ์ดํด ๋‹จ์–ด

์‚ฌ์ดํด ๋‹จ์–ด๋Š” ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์›ํ˜• ๋ชจ์–‘์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์“ด ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์ด๋ ‡๊ฒŒ ์“ด ํ›„์— ์ž„์˜์˜ ๋‹จ์–ด๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๊ทธ ํ›„์— ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ์œผ๋ฉด ๊ทธ ๊ฒƒ์ด ๋‹จ์–ด๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ์—

www.acmicpc.net

 

๋ฌธ์ œ

์‚ฌ์ดํด ๋‹จ์–ด๋Š” ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์›ํ˜• ๋ชจ์–‘์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์“ด ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์ด๋ ‡๊ฒŒ ์“ด ํ›„์— ์ž„์˜์˜ ๋‹จ์–ด๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๊ทธ ํ›„์— ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ์œผ๋ฉด ๊ทธ ๊ฒƒ์ด ๋‹จ์–ด๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ์— ๋‹จ์–ด A์™€ ๋‹จ์–ด B๊ฐ€ ์žˆ์„ ๋•Œ, ๋‹จ์–ด B๋ฅผ ์›ํ˜•์œผ๋กœ ์จ์„œ, ๋‹จ์–ด A์™€ ๊ฐ™์ด ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉด, ๋‘ ๋‹จ์–ด๋Š” ๊ฐ™์€ ๋‹จ์–ด์ด๋‹ค. ๋”ฐ๋ผ์„œ, picture์™€ turepic์€ ๊ฐ™์€ ๋‹จ์–ด๋‹ค.

N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 50์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <string.h>

using namespace std;

vector<string> v;

// s1 ๊ณผ s2๊ฐ€ ๊ฐ™์€ ์‚ฌ์ดํด ๋‹จ์–ด์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜
bool cycleWord(string s1, string s2) {
    for(int k=0; k<s1.size(); k++) {
        if(strcmp(s1.c_str(), s2.c_str()) == 0)
            return true;
        
        s1 += s1[0];
        s1.erase(0,1);
    }
    return false;
}

// ๋ฌธ์ž์—ด ๋ฒกํ„ฐ ๋‚ด์— i๋ฒˆ์งธ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ์‚ฌ์ดํด๋‹จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜
bool isThereSame(int i) {
    for(int j=i+1; j<v.size(); j++) {
        if(cycleWord(v[i], v[j]))
            return true;
    }
    return false;
}

// ์„œ๋กœ ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ ์นด์šดํŠธ
int solution(int n) {
    int ans=0;
    
    for(int i=0; i<n; i++) {
        if(!isThereSame(i))
            ans++;
    }
    
    return ans;
}

int main() {
    int n;
    cin >> n;
    v.assign(n,"");
    for(int i=0; i<n; i++) {
        cin >> v[i];
    }
    
    cout << solution(n);
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•