백준 - 1316 그룹 단어 체커

요리하는코더·2021년 8월 22일
0

알고리즘 - 문제

목록 보기
16/48
post-thumbnail

코드

C++

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    string str;
    int answer = 0;
    
    cin >> n;
    for(int i=0;i<n;i++) {
        cin >> str;
        int alpha[27] = {0,};
        int len = str.length();
        bool check = true;
        for(int j=0;j<len;j++) {
            if(j == len-1) {
                if(str[j] != str[j-1])
                {
                    alpha[str[j]-'a']++;
                }
            } else {
                if(str[j] != str[j+1]) {
                    alpha[str[j]-'a']++;
                    if(alpha[str[j+1]-'a'] == 1) {
                        check = false;
                        break;
                    }
                }
            }
            if(alpha[str[j]-'a'] > 1) {
                check = false;
                break;
            }
        }
        if(check) {
            answer++;
        }
    }
    cout << answer;
}

Python

n = int(input())
for _ in range(n):
    word = input()
    for i in range(len(word)-1):
        if word[i] != word[i+1]:
            if word[i] in word[i+1:]:
                n -= 1
                break

print(n)

풀이 및 소감

단톡을 보다가 어떤 분이 물어서 풀어본 문제인데 빠르게 풀어보려고 c++을 사용해서 풀었다. 단어들을 비교하다가 이전에 나왔으면 break 해주는 방식으로 해결했다. aabaa라는 반례를 못 찾아서 시간이 오래 걸렸었다. python 코드는 요새 같이 공부하는 형이 해결한 방식인데 다른 단어가 나오면 그 다음 단어부터 잘라서 거기에 존재하는지 파악하는 방식으로 해결했다. 시간이 오래 걸리지 않을까 생각했는데 처음 if문에서 최대로 걸려도 알파벳 개수 상 27번 정도여서 속도에서 크게 문제가 없을 거 같다.

profile
요리 좋아하는 코린이

0개의 댓글