이것저것 공부한 기록

C++) HackerRank 풀이_Alternating Characters 본문

Study/프로그래밍 문제풀이

C++) HackerRank 풀이_Alternating Characters

블랜디 2019. 10. 25. 18:39

https://www.hackerrank.com/challenges/two-strings/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=dictionaries-hashmaps

 

Two Strings | HackerRank

Given two strings, you find a common substring of non-zero length.

www.hackerrank.com

 

문제 자체는 간단한데 푸는 방법을 새롭게 알아서 포스팅하기.

 

원래대로... 각 문자가 있는지 없는지 2중 for문을 무식하게 돌렸는디

이번에 그렇게 짰더니 인풋 string 최대 길이가 10의 5승이라서 그런가 시간초과가 3문제.

 

 

뭐지? 하고 Help를 요청했더니

매우 간단한 방법이 있었다.

 

어짜피 알파벳 체크이고, input도 소문자로 고정되어 있기 때문에

 

소문자의 아스키코드를 가지는 배열을 만들어

숫자를 체크하는것 ㅎ...

 

#include <bits/stdc++.h>

using namespace std;

// Complete the twoStrings function below.
string twoStrings(string s1, string s2) {
    int alp[26] = {0,};
    int len1 = s1.length();
    int len2 = s2.length();

    for( int i = 0 ; i < len1 ; ++ i)
    {
        alp[s1[i]-'a'] ++ ;
    }


    for( int i = 0 ; i < len2 ; ++ i )
    {
        if( alp[s2[i]-'a'] > 0)
        {
            return "YES";
        }
    }

    return "NO";
}

int main()
{
    ofstream fout(getenv("OUTPUT_PATH"));

    int q;
    cin >> q;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    for (int q_itr = 0; q_itr < q; q_itr++) {
        string s1;
        getline(cin, s1);

        string s2;
        getline(cin, s2);

        string result = twoStrings(s1, s2);

        fout << result << "\n";
    }

    fout.close();

    return 0;
}