비슷한 단어 - 2607

2025. 2. 12. 15:22PS/백준

문제

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

느낀점

상당히 애를 많이 먹었다.. 처음에는 set으로 비교하고 아닌 경우를 iterator로 찾으려고 했으나 그 경우, 문자의 순서가 달라질 수 있는 문제가 있어 다른 방법을 찾았다. 알파벳이 몇 개 있는지 판단하는 방법으로 풀었는데, 문제를 천천히 제대로 읽으면 방법을 유추할 수 있었다. 따라서, 구현 문제에서는 문제를 꼼꼼하게 잘 읽자!

풀이

#include <iostream>
#include <string>
#include <vector>

std::vector<int> calcIndex(std::string s)
{
    std::vector<int> result(26, 0);
    for (size_t i = 0; i < s.size(); i++)
    {
        result[s[i] - 'A']++;
    }

    return result;
}
int main()
{
    int N, answer = 0;
    std::cin >> N;
    std::string reference;
    std::cin >> reference;
    std::vector<int> refInd = calcIndex(reference);
    std::vector<int> difference;
    for (int i = 0; i < N - 1; i++)
    {
        std::string str;
        std::cin >> str;
        // std::cout << "i: " << i << std::endl;
        std::vector<int> compInd = calcIndex(str);
        difference.clear();
        for (int j = 0; j < 26; j++)
        {
            if (refInd[j] != compInd[j])
            {
                difference.push_back(refInd[j] - compInd[j]);
                // std::cout << "j: " << j << "\n";
            }
        }
        if (difference.empty())
        {
            answer++;
        }
        else if (difference.size() == 1 && abs(difference[0]) == 1)
        {
            answer++;
        }
        else if (difference.size() == 2 && abs(difference[0]) == 1 && difference[0] + difference[1] == 0)
        {
            answer++;
        }
    }
    std::cout << answer;

    return 0;
}

'PS > 백준' 카테고리의 다른 글

A->B - 16953  (0) 2025.02.12
팰린드롬 만들기 - 1254  (0) 2025.02.12
오리 - 12933  (0) 2025.02.12
앵무새 - 14713  (0) 2025.02.12
222-풀링 - 17829  (0) 2025.02.12