반응형
풀이
먼저 간단히 문제를 이해하고 넘어가자.
예제 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 |