Python_알고리즘

[Python] 백준 1316 그룹 단어 체커

hahihuree 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