-
백준 1316 그룹 단어 체커 파이썬IT/알고리즘 2022. 3. 7. 18:55728x90
풀이
먼저 간단히 문제를 이해하고 넘어가자.
예제 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]번째로 넘어가나?
누가 알려주면 좋겠당
'IT > 알고리즘' 카테고리의 다른 글
백준 2675 문자열 반복 자바스크립트 Javascript (0) 2022.04.21 자바스크립트로 입출력 받기 (0) 2022.04.18 백준 2941 크로아티아 알파벳 (0) 2022.03.03 백준 5622 다이얼 파이썬 (이해 안가는 부분 해결) (0) 2022.03.02 백준 2908 상수 (0) 2022.03.01