백준 알고리즘 1316 그룹단어 체크 파이썬
https://www.acmicpc.net/problem/1316
처음에 이렇게 삽질했다...
# 단어 갯수 입력값
n = int(input())
#입력받은 단어 리스트
words = []
# 개수 저장
counter = 0
check_list = []
check = True
# n의 수만큼 단어 입력값
for i in range(n):
word = list(input())
words.append(word)
a = len(words)
for k in range(a):
check = True
if check == True:
for j in range(a):
#마지막 글자가 인덱스를 넘어가서 -1로 균형맞춰줌.
#어차피 마지막은 비교할 일 없으니까
if words[k][k] != words[k][j] and words[k][k] not in check_list:
check_list.append(words[k][j])
if words[k][k] != words[k][j] and words[k][k] in check_list:
check = False
continue
if check == True:
counter += 1
print(counter)
입력값으로 word를 하나하나 받아와서 words에 넣어주려고 했었고,
check를 blooen으로 만들어서 통과가 되면 +1씩 해주려 했는데,
단어 끝이 문제인건지 자꾸만 오류ㅠㅠ
수정
n = int(input())
words = 0
for _ in range(n):
word = input()
fail = 0
for i in range(len(word)-1):
if word[i] != word[i+1]:
new_word = word[i+1:]
if new_word.count(word[i]) > 0:
fail += 1
if fail == 0:
words += 1
print(words)
word를 for문만큼 입력시킨 다음에 빈 리스트에 넣어주는게 아니라
입력을 받을 때 마다 for문을 돌려서
해당 word의 범위만큼 인덱스를 생성하는데, 여기서 끝의 글자는 비교할 필요가없으니 -1 해준다.
그 후 word[i]와 word[i+1]을 비교해준다.
연속된 두 글자를 비교해서
만약 다르다면, 그 뒤에 같은 글자가 있는지 비교해야하니
new_word라고 word의 i+1부터 남은 모든 부분을 [i+1:] 해준 변수를 만든다.
그리고 만약 new_word에 처음 비교된 word[i]가 있다면 이건 실패한 거니 fail+1을 해주고,
다시 for문을 돌린다.
만약 fail이 한번도 일어나지 않았다면 성공적인 글자니 words에 1을 더해준다.
다시 for문의 처음으로 돌아와 word의 입력값을받고 fail을 0으로 초기화시킨다.
'Back > Algorithm' 카테고리의 다른 글
Python 백준 4948 베르트랑 공준 / 파이썬 알고리즘 (0) | 2021.03.12 |
---|---|
Python 백준 알고리즘 2839 설탕배달 파이썬 (0) | 2021.03.12 |
백준 알고리즘 2606 바이러스 / 파이썬 (Python) (0) | 2021.03.11 |
Python 백준 1874 스택수열 알고리즘 (0) | 2021.03.10 |
Python 백준 4949 균형잡힌세상 / 스택 알고리즘 (0) | 2021.03.10 |