현제의 현재이야기
[백준/python] 1316 - 그룹단어 체커 본문
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)
알고리즘
- 정수 n을 받고 그룹 단어가 아닌 것을 세는 cnt 변수 생성
- 문자열 a를 리스트로 받고 a의 길이를 length 변수에 저장
- i를 0으로 초기화. i는 target이 되는 문자가 다음으로 넘어갈 때 같이 +1 되기 위해서 만듦
- i + 2가 총 길이를 넘겨버리면 범위 초과이기 때문에 첫번째 break문을 만듦
- a[i + 2] 이후에 같은 문자가 있고 a[i + 1]가 타겟이랑 같지 않으면 그룹 단어가 아니다.ex) acbbb : i가 2일때 a[i + 2] = b이나 a[i + 1] = b로, bbb 연속이기 때문에 그룹단어이다.
- 애 먹었던 포인트: 처음에 저 (a[i + 1] != target)를 추가하지 않고 abcabc 등등 예시 입력을 다 넣어도 통과되길래 좋아했으나 거듭 실패함. 생각해보니깐 acbbb와 같은 예제도 (a[i + 1] != target)를 추가하지 않으면 그룹 단어가 아니라고 판단하는 것을 깨달음/ 초반에 슬라이싱이 떠오르지 않았다.
- ⇒ 즉 a[i+2] 이후에 같은 문자가 있더라도 a[i + 1]이 target과 같으면 그룹 단어이다. 3개 이상 연속되어도 그룹 단어란 뜻
'algorithm' 카테고리의 다른 글
[백준/python] 2531 - 회전 초밥 (0) | 2022.06.25 |
---|---|
[백준/python] 1748 - 수 이어 쓰기 1 (0) | 2022.06.25 |
[백준/python] 11650 - 좌표 정렬하기 (0) | 2022.06.25 |
[백준/python] 2747 - 피보나치 수열 (0) | 2022.06.25 |
[백준/python] 2941 - 크로아티아 알파벳 (0) | 2022.06.25 |
Comments