현제의 현재이야기

[백준/python] 1316 - 그룹단어 체커 본문

algorithm

[백준/python] 1316 - 그룹단어 체커

현재의 현제 2022. 6. 25. 15:05
n = int(input())
cnt = 0
for _ in range(n):
    a = list(input())
    length = len(a)
    i = 0
    for target in a:
        if i + 2 > length:
            break
        if (a[i + 1] != target) and (target in a[i + 2:]):
            cnt += 1
            break
        else:
            i += 1     
print(n - cnt)

알고리즘

  1. 정수 n을 받고 그룹 단어가 아닌 것을 세는 cnt 변수 생성
  2. 문자열 a를 리스트로 받고 a의 길이를 length 변수에 저장
  3. i를 0으로 초기화. i는 target이 되는 문자가 다음으로 넘어갈 때 같이 +1 되기 위해서 만듦
  4. i + 2가 총 길이를 넘겨버리면 범위 초과이기 때문에 첫번째 break문을 만듦
  5. a[i + 2] 이후에 같은 문자가 있고 a[i + 1]가 타겟이랑 같지 않으면 그룹 단어가 아니다.ex) acbbb : i가 2일때 a[i + 2] = b이나 a[i + 1] = b로, bbb 연속이기 때문에 그룹단어이다.
  6. 애 먹었던 포인트: 처음에 저 (a[i + 1] != target)를 추가하지 않고 abcabc 등등 예시 입력을 다 넣어도 통과되길래 좋아했으나 거듭 실패함. 생각해보니깐 acbbb와 같은 예제도 (a[i + 1] != target)를 추가하지 않으면 그룹 단어가 아니라고 판단하는 것을 깨달음/ 초반에 슬라이싱이 떠오르지 않았다.
  7. ⇒ 즉 a[i+2] 이후에 같은 문자가 있더라도 a[i + 1]이 target과 같으면 그룹 단어이다. 3개 이상 연속되어도 그룹 단어란 뜻
Comments