[Python] BOJ 1316 - 그룹 단어 체커
728x90
반응형
https://www.acmicpc.net/problem/1316
딱히 어려운 문제는 아니지만, 잡기술(?)하나를 설명하기 위해 정리를 해본다.
import sys
input = sys.stdin.readline
n = int(input())
cnt = 0
def gcheck(s):
L = [0 for _ in range(26)]
tf = True
for i in range(len(s)):
if(i != 0 and s[i] == s[i-1]):
continue
else:
if(L[ord(s[i])-97] == 0):
L[ord(s[i])-97] += 1
else:
tf = False
break
if(tf == True):
return True
for _ in range(n):
s = input().rstrip()
if(gcheck(s) == True):
cnt += 1
print(cnt)
내장함수 없이 짠 코드이다. a의 아스키코드가 97인 점을 이용해서 알파벳 갯수만큼 L에 0을 저장하고 input받는 문자열을 돌며 i번째 인덱스에 해당하는 알파벳이 이전에 나오지 않았으면 L[ord(s[i])-97]이 0이므로 +1해주고 0이 아니면 이전에 나왔으므로 '그룹 단어'가 아니어서 break를 걸어주었다. 그리고 연속으로 문자가 나올경우는 if문을 통해 continue처리를 해주었다.
* 인터넷을 찾아보던중 내장 함수 sorted중에 key = list.find를 사용하면 매우 간단하게 풀 수 있다는 것을 발견했다.
input받은 문자열을 리스트에 넣고 key에 word.find를 하면 문자열 순서대로 정렬이 된다.
따라서 처음 입력받은 문자열리스트와 정렬된 리스트가 같으면 '그룹 단어'라고 판단해 문제를 풀면 짧게 풀 수 있다.
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 10816 - 숫자 카드 2 (lower bound, upper bound) (0) | 2020.04.26 |
---|---|
[Python] BOJ 2108 - 통계학 (0) | 2020.02.29 |
[Python] BOJ 1654 - 랜선 자르기(Binary Search) (0) | 2020.02.21 |
[Python] BOJ 2609 - 최대공약수와 최소공배수(유클리드 호제법) (0) | 2020.02.18 |
[Python] BOJ 5430 - AC(deque) (0) | 2020.02.12 |
TAGS.