메모/알고리즘
[백준] Python - 그룹 단어 체커
Floodnut
2021. 9. 9. 20:51
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
그룹 단어 체커 문제이다.
1개 이상의 같은 알파벳끼리는 모여있어야한다.
ex)
abcdddd -> a, b, c, d가 각각 모여있으니 그룹 단어.
abababc -> a, b가 자기 끼리 모여있지 않으니 그룹 단어가 아님.
파이썬을 활용했고 다른 더 좋은 알고리즘이 충분히 존재할 수 있다.
나는 인덱스 0부터 문자열의 끝 인덱스까지 탐색하며 현재 위치의 알파벳의 인덱스를 딕셔너리에 저장했다.
그리고 다른 인덱스를 검증할 때 기존에 저장했던 인덱스라면 딕셔너리에 그 위치(인덱스 번호)가 저장되 있을 것이고 그 위치의 차이를 확인하는 방식으로 했다.
다른 알고리즘으로는 마지막 위치를 저장하는 것이 아닌 단순하게 사용된 단어라면 1 아니라면 0을 저장하는 식으로 했어도 됬을 것이다.
(친구 아이디어)
소스 코드는 아래 확인.
더보기
#https://github.com/CASPER-REPSAC/algorithm-stack/blob/gsniper777/baekjoon/1316
import sys
wordCounts = int(input())
groupcount = 0
words = []
wordsLastPos = {} #문자열의 특정 문자의 마지막 위치를 저장할 딕셔너리
def cmpPosition(words):
for i in range(len(words)): #문자열을 첫 단어부터 끝 단어까지
if((wordsLastPos.get(words[i]) == None) or ((i-wordsLastPos[words[i]]) == 1) ):
wordsLastPos[words[i]] = i #딕셔너리에 처음 저장되는 단어거나 연속된 단어일 경우 딕셔너리 갱신
elif( (i - wordsLastPos[words[i]]) > 1 ):
return 0 #연속되지 않는 단어일 경우 0 리턴
return 1 #문자열의 끝까지 0이 리턴되지 않고 정상적으로 탐색했다면 1 리턴
for repeat in range(wordCounts):
a = sys.stdin.readline().strip()
words.append(a)
for repeat in words:
if(cmpPosition(repeat) == 1):
groupcount += 1 #정상적 리턴(1)마다 1씩 증가
wordsLastPos = {}
print(groupcount)