[백준 BOJ] 1316번(그룹 단어 체커) Python 풀이
# 해당 포스팅은 이제 막 알고리즘 공부를 시작한 초보 수준에서 작성했음을 이해해주시고, 비난보다는 따뜻한 조언을 부탁드립니다.
안녕하십니까, 간토끼입니다.
오늘은 백준 1316번 (그룹 단어 체커)에 대해 다뤄보겠습니다.
1. 문제 링크
https://www.acmicpc.net/problem/1316
그룹 단어란 단어에 존재하는 모든 문자에 대해서 각 문자가 연속해서 나타나는 경우를 말합니다.
즉 aabbcc는 그룹단어지만, aabba는 그룹단어가 아닙니다. 왜냐하면 a가 b를 지나서 또 등장했기 때문이죠.
하지만 ijk처럼 특정 문자가 1개씩만 존재하는 문자도 그룹단어로 보고, a 하나로만 이루어진 단어도 그룹단어로 봅니다.
입력으로 첫째 줄은 단어의 개수(N), 둘째 줄부터는 N개의 문자열이 입력되고요.
출력으로는 이 입력들을 바탕으로 그룹 단어를 체크해서 그룹 단어의 개수를 출력하면 됩니다.
2. 접근 방법
다음과 같이 접근하였습니다.
결국 그룹단어는 특정 문자에서 다른 문자로 바뀌는 지점을 체크해주면 되는 문제라고 생각했습니다.
즉 i번째까진 a였는데, i+1은 b가 된다면 이때 조건을 따져봐야 하는데요.
만약 이 상황에서 i+1번째 단어가 이전에 등장했던 단어라면 이는 그룹단어가 될 수 없겠죠.
어려운 문제는 아니었습니다.
3. 코드
# 그룹 단어 체커
# initial setting
# 아이디어
# 단어를 쭉 읽다가 만약 i번째와 i-1번째가 다를 때, i번째 단어가 i-1, i-2, ... 에 있다면 얘는 아웃
# 그게 아니라면 다시 체크
# ex. abc
# i = 0 -> a[i] : a
# -> a[i+1] : b 이때 a[i+1] != a[i] 이므로 a[i+1] 가 이전에 있었다면 아웃
#
num = int(input())
cnt = 0
for i in range(num):
words = input() # i-th 단어 입력
bow = []
# 만약 문자열이 1개로만 이루어져있다면 그룹단어임.
if len(words) == 1:
cnt += 1
else:
for j in range(len(words)):
if j == 0:
bow.append(words[0])
elif j > 0:
if words[j] == words[j-1]:
bow.append(words[j])
if j == len(words)-1:
cnt += 1
elif words[j] != words[j-1]: # j번째 철자가 앞의 철자와 다를 때
if words[j] not in bow:
if j == len(words)-1:
cnt += 1
else:
bow.append(words[j])
elif words[j] in bow: # j번째 철자가 앞에서 등장했다면 중단
break
print(cnt)
감사합니다.
잘 읽으셨다면 게시글 하단에 ♡(좋아요) 눌러주시면 감사하겠습니다 :)
(구독이면 더욱 좋습니다 ^_^)
* 본 블로그는 학부생이 운영하는 블로그입니다.
따라서 포스팅에 학문적 오류가 있을 수 있으며, 이를 감안해서 봐주시면 감사하겠습니다.
- 간토끼(DataLabbit)
- B.A. in Economics, Data Science at University of Seoul