백준 1316번:그룹 단어:파이썬

태훈입니다·2022년 12월 12일
0

코테 풀이

목록 보기
29/34

정답 코드:

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이 나온다.

설명을 못한다는 건, 아직 이 문제에 대해 완벽하게 파악을 못했다는 얘기일 수도 있다..
다음에 기억이 안 날때 다시 풀어보면서 문제를 이해해야겠다.
profile
개발 공부를 하고 있는 비전공자입니다!

0개의 댓글