[Coding test][실버V]BOJ #1316 그룹 단어 체커(문자열, 구현)
내 풀이
import sys
cycle = int(sys.stdin.readline().rstrip())
count = 0
for i in range(cycle):
n = sys.stdin.readline().rstrip()
checker = []
for char in n:
if char in checker:
if checker[-1] != char:
break
else:
checker.append(char)
else:
count += 1
print(count)
문제 정의
연속된 문자가 문자열 내에 존재하고, 문자열 내에서 중복되지 않는다면 이는 그룹단어이다.
예를들어 happyer이라는 단어가 있다면 이는 그룹문자이다.
iamhappy라는 문자는 a라는 문자가 다른 곳에서 중복되고 있으므로 그룹단어가 아니다.
풀이
그룹단어를 어떻게 처리해야할지 잘 몰라서 처음에는 중복문자를 제거하는 방식으로 접근했다. 하지만 이내 곧 그룹단어를 체크하는 부분에서 막혀버렸다.
문제를 풀면서 for-else문에 대해서 배웠다.
for else
일반적으로 else는 if와 함께 쓴다고 배웠다.
if와 함께 쓰일때는 if조건에 걸리지 않는 경우, else의 코드가 실행된다.
for문의 경우, for문이 정상적으로 모두 실행되었을때 비로소 else문이 작동하게된다.
for문이 정상적으로 작동하지 않는 경우란 for문 중간에 break으로 for문이 강제종료될때이다.
예시로
for i in range(cycle):
n = sys.stdin.readline().rstrip()
checker = []
for char in n:
if char in checker:
if checker[-1] != char:
break
else:
checker.append(char)
else:
count += 1
이 부분에서 안쪽 for문은
(1)checker에 입력받은 문자열의 char이 존재할때,
(2)checker의 마지막 문자가 char와 같지 않다면
종료된다.
만약 없다면 checker에 char가 추가되고 다음 n의 char로 for문이 실행된다.
n의 모든 char에 대해서
(1) checker에 없다면 추가
(2) checker에 있다면 마지막 요소와 비교해 같으면 다음 char을 체크
를 반복하면서 그룹단어 체크를 완료
(1)과 (2)의 과정이 모두 정상적으로 종료되어야(그룹단어이어야)
count가 1 증가하는 for~else의 코드가 실행되고 다음 싸이클로 넘어간다.
댓글남기기