-
[백준] Python - 그룹 단어 체커메모/알고리즘 2021. 9. 9. 20:51
그룹 단어 체커 문제이다.
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)
'메모 > 알고리즘' 카테고리의 다른 글
[백준] Python - 최소 스패닝 트리 (0) 2021.10.09 [백준] Python - 트리 순회 (0) 2021.09.24 [백준] Python - 최대힙 (0) 2021.09.19 [백준] Go, Python - 후위 표기식 2 (0) 2021.09.17 [백준] Python - 염색체 (0) 2021.09.09