정답 코드:
N = int(input())
cnt = N
for i in range(N):
a = input()
for i in range(len(a)-1):
if a[i] == a[i+1]:
pass
elif a[i] in a[i+1:]:
cnt -= 1
break
print(cnt)
코드 풀이:
알고리즘 짜기가 어려웠다. 비슷하게 만들어놓고 해결을 못했는데
그 방법은 len(a)-1이었다..
우선 예제의 숫자를 N으로 입력받고,
cnt (카운트) 숫자를 N으로 설정한다.
그 뒤 N번 반복을 통해 a라는 str을 입력받아
다시 a를 반복문에 돌린다, 예를 들어 a = happy 일 경우
이중 반복문에서 조건문을 통과하게 되는데,
h , a 는 당연히 pass가 되고 p 같은 경우엔 a[i] == a[i+1] 조건에
True가 되기에 pass가 된다.
여기 이중 반복문에서 for i in range(len(a)-1) :을 하는 이유를 알아야하는데,
만약 범위가 len(a)일 경우, i가 마지막 인덱스일경우엔 a[i+1] 의 값이 없기에
에러가 뜨기 때문이다. 그래서 범위를 일부러 a 문자열의 마지막에서 두 번째 인덱스까지로 잡아두고
마지막 인덱스를 대입했을 때 a[i+1]이 에러가 안뜨도록 해주었다.
그리고 elif 조건은 만약 a[0]번 인덱스가 a[2번인덱스~끝까지] 중에 있다면,
cnt 를 -1하고 반복문을 바로 나가도록 break를 넣어줬다.
break가 없다면, 계속 반복문을 통해 cnt를 계속해서 -1 하기에 정답을 얻을 수 없기에
..
쉽게 설명하면 a = abaabaa인 경우
a가 elif 문을 통과하고, cnt에서 1을 빼준 뒤 그 즉시 반복문이 끝나기에
N = 1 , a = abaabaa 가 입력 값이 된다면 정답인 0을 얻을 수 있고,
break를 사용하지 않으면 a와 b 두 번이 적용되기에 -1이 나온다.
설명을 못한다는 건, 아직 이 문제에 대해 완벽하게 파악을 못했다는 얘기일 수도 있다..
다음에 기억이 안 날때 다시 풀어보면서 문제를 이해해야겠다.