-
[Python] 백준 1316 그룹 단어 체커Python_알고리즘 2021. 7. 3. 01:52
문제 바로가기
문제분석
# 그룹단어를 확인하기 위해서 첫번째 인덱스부터 나머지 인덱스에 있는 알파벳을 비교해야한다.
# 만약 첫번째 알파벳을 옆 인덱스와 비교했을 때, 같다면 계속 비교를 하고
# 다른 알파벳이 나왔다면 그 인덱스부터 끝날때까지는 첫번째 알파벳이 나오면 안된다.
문제풀이
# 방법1
n = int(input()) for _ in range(n): word = input() for i in range(len(word) - 1): if word[i] != word[i + 1]: if word[i] in word[i + 1:]: n -= 1 break print(n)
# 첫 입력값으로 단어의 개수를 입력 받는다.
# 그룹단어가 몇개인지 출력해야 하므로 주어진 단어의 개수 만큼 반복문을 돌리고 두번째 입력값으로 단어들을 받는다.
# 받은 단어의 길이-1 만큼 반복문을 돌려 비교를 한다.
# 여기서 -1인 이유는 단어의 다음 인덱스와 비교하는데 마지막 단어는 비교할 필요가 없기 때문이다.
# if문으로 비교연산을 한다. 입력받은 단어의 i번째 인덱스와 그 다음인덱스를 비교해서 다른 값이 나왔을 때,
# 다른 단어가 나온 인덱스부터 끝까지 i번째 인덱스의 알파벳은 나오면 안된다.
# 그 이후에도 같은 알파벳이 발견 되었다면 제일 처음 입력값으로 받은 단어의 개수에서 -1을 해주고 반복문이 끝나면 해당 n을 출력한다.
# 방법2
n = int(input()) for _ in range(n): word = input() # abba for i in range(len(word)-1): # 3번 반복 if word.find(word[i]) > word.find(word[i+1]): # b>b -> 2>2 조건문에 안맞으니 다음비교로 넘어감 # b>a -> 2>1 find메소드는 같은 문자가 여러개일때 제일 처음 인덱스 반환 n -= 1 break print(n)
# 기본적인 접근방식은 비슷하나 여기서는 find메소드를 사용했다.
# 입력받은 문자에서 i번째 인덱스의 알파벳과 i+1번째 알파벳의 인덱스를 비교한다.
# find메소드는 같은 문자가 여러개일 때 제일 처음 인덱스를 반환한다는게 핵심이다.
# i번째 인덱스에 위치한 알파벳의 인덱스값이 그 이후 인덱스에 위치한 알파벳의 인덱스 값보다 크다면, 그 이후에 같은 알파벳이 나왔다는 것이므로 그룹단어가 아니게 된다.
# 두 방법 모두 메모리와 시간은 비슷하게 나온다.
추가내용
# 문자열 검색 find( )
- 찾고싶은 문자가 없다면 -1 반환
- 찾고싶은 문자가 여러개라면 제일 처음 인덱스 반환
- rfind( )의 경우 찾고 싶은 문자가 여러개라면 제일 마지막 인덱스 반환
n = 'abbaa' index = n.find('b') print(index) #1
- 검색 위치를 지정하고 찾기 문자열.find(a, start)
n = 'abbaabba' index = n.find('b', 4) # 두번째 파라미터인 4는 검색 시작위치 print(index) # 5
'Python_알고리즘' 카테고리의 다른 글
[Python] 백준 1011 Fly me to the Alpha Centauri (0) 2021.07.06 [Python] 백준 2839 설탕 배달 (0) 2021.07.04 [Python] 백준 2941 크로아티아 알파벳 (0) 2021.07.02 [Python] 백준 1157 단어 공부 (0) 2021.07.01 [Python] 백준 4673 셀프 넘버 (0) 2021.06.29