본문 바로가기

Problem Solving/백준

백준 1316 그룹 단어 체커 (파이썬)

www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때�

www.acmicpc.net

이 문제는 파이썬 set을 활용하여 해결하였다.

파이썬에서 입력을 받을 때 sys.stdin.readline함수를 사용하는 게 속도면에서 빠르지만, 이 문제에서는 그냥 input()으로 받았다.

 

문제에서 주어지는 단어를 읽고, (이 문제에서에는 파이썬에 대해 잘 모르던 시절에 작성하였던 코드라 한 글자씩 일일이 받았다 ㅠㅠ)

새로운 글자가 나오면 set에 담고, 이전에 나왔던 글자가 다시 나왔을 경우, 거기서 break하고 그룹 단어로 세지 않는 방식이다.

 

파이썬 set의 특성을 활용하였다. 한번이라도 등장한 문자들을 순서 없이 모아두기만 하면 되고, set에 그 문자가 있는지 없는지만 체크하면 되므로 배열 등을 만들어 보관할 필요가 없다. 

그리구 파이썬에서는 [something] in [set]을 통해 set안에 something이 있는지 확인할 수 있다. 리턴이 True면 갖고 있다는 것이다.

 

<주요 내용>

파이썬 set 활용

 

<코드>

def main():
    n = int(input())
    w = []
    for _ in range(n):
        w.append(input())
    s = set()
    c, b = 0, 0
    for l in w:
        s.add(l[0])
        for i in range(1, len(l)):
            if l[i-1] != l[i]:
                if l[i] in s:
                    b = 1
                    break
                else:
                    s.add(l[i])
        if b != 1:
            c += 1
        b = 0
        s = set()
    print(c)


main()