본문 바로가기
IT/알고리즘

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

by 시작은코딩 2022. 3. 7.
반응형


풀이

먼저 간단히 문제를 이해하고 넘어가자.

예제 3번이 가장 이해를 돕기 쉬운 예제로 느껴지는데, 

5
ab
aa
aca
ba
bb

5번의 입력값을 받는데,

첫번째 ab

 - 서로 같은 문자가 아니며, 중복되지 않는다.

두번째 aa

 - 서로 같은 문자이지만, 연속되어 나온다.

세번째 aca

 - a가 두 개로 중복이지만, 연속되어 나오지 않는다 -1

네번째 ba

 - 서로 같은 문자가 아니며, 중복되지 않는다.

다섯번째 bb

 - - 서로 같은 문자이지만, 연속되어 나온다.

 

그렇기에 출력값은 4가 나온다.

 

찐풀이

n = int(input())  #입력값을 넣는다.
for i in range(n): #입력값의 범위만큼 for문을 돌리며
    a= input() #n번 입력하는 것
    for j in range(len(a)-1): #for 문 안에 한번 더 for문 삽입, 범위는 작성한 문자열 a -1 로 한다.
        if a[j] == a[j+1] : # 예를들어 a[0]번째와 a[1]번째가 같다면
            pass # 패스
        elif a[j] != a[j+1] : # 예를들어 a[0]번째와 a[1]번째가 다르다면
            if a[j] in a[j+1:]: #달랐을 때, a[0]번째와 a[1]번째 이후 끝까지에서 a[0]번째랑 같은 문자가 있다면
                n -=1 #입력한 정수값에서 1을 빼준다. 
                break # 그리고 나와서 다름 for문으로 가는것
print(n)

일단 range(len(a)-1) 문자열에서 -1을 한 부분은 내가 j+1을 할 거기 때문에,

 

예를들어 happy 라는 단어를 받았을 때, 본래의 길이로 받으면 0,1,2,3,4번째 까지 받는데

거기서 내가 마지막 j번째(4번째)와 j+1번째(5번째 - 없음)를 비교할 수 없으니까.

 

풀이에서 중요한 부분은 elif 부분으로 생각되는데,

a[0]번째와 a[1]번째가 다를 때, a[0]번째와 그 뒤 a[1~끝]까지의 문자중 a[0]번째랑 같은 게 있다면 그건 중복이지만, 연속된 숫자는 아니므로 그룹 단어가 아니다. 그러므로 -1을 해준 것.


 

개인적으로 궁금한 점

a[0]번째와 a[1]번째가 다를 때, 중복이 아니면 그냥 자연스레 a[1]번째로 넘어가나?

누가 알려주면 좋겠당

반응형