문제요약
나의 코드 및 설명
- 입력받은 단어의 첫 번째 글자부터 하나하나 살펴본다.
26개의 리스트를 요소로 갖는 2차원 인덱스를 생성하여, 각 알파벳 순서(인덱스)에 맞는 누적된 글자의 개수를 해당 위치에 추가시킨다. 그 후 누적된 글자 개수의 최댓값이 글자의 개수와 같은지 다른지를 확인한다.
n = int(input())
#그룹 단어의 개수 : 총 단어의 개수로 초기화
total_cnt = n
for _ in range(n):
string = list(input())
#26개의 알파벳만큼 리스트를 생성 (a=idx0 / b=idx1 ...)
#알파벳 리스트의 인덱스는 <알파벳을 아스키코드로 변환한 값 - 97> 이다.
alpha = [[] for _ in range(26)]
#현재 누적된 글자 개수는 1
cnt = 1
#단어 글자를 하나하나 뜯어보며 분석
for i in range(len(string)):
#첫 번째 글자는 누적된 글자 개수가 1이다.
if i == 0:
#알파벳 리스트에 누적된 글자 개수 저장
alpha[ord(string[i])-97].append(cnt)
else:
#만약 이전 글자하고 같다면
if string[i] == string[i-1]:
#누적된 글자 개수를 1 증가시키고
cnt+=1
#알파벳 리스트에 누적된 글자 개수 추가
alpha[ord(string[i])-97].append(cnt)
#만약 이전 글자하고 다르다면
else:
#누적된 글자 개수를 1로 갱신하고
cnt = 1
#알파벳 리스트에 누적된 글자 개수 1 추가
alpha[ord(string[i])-97].append(cnt)
for i in range(len(alpha)):
#알파벳이 없는 곳은 통과
if len(alpha[i]) == 0:
continue
else:
#누적된 글자 개수의 최댓값이 리스트길이(단어에서 총 등장한 글자 개수)와 다르면
if max(alpha[i]) != len(alpha[i]):
#그룹 단어의 개수에서 1을 빼고 반복문 탈출
total_cnt -= 1
break
print(total_cnt)
다른 코드 및 설명
- 현재 글자와 다음 글자가 다르다면, 다음 글자부터 나머지 글자까지의 문자열을 만들고, 그 문자열에 현재 글자가 포함되어 있는지 확인한다. 포함되어 있다면 error 값을 1 증가시킨다.
n = int(input())
group_word = 0
for i in range(n):
word = input()
error = 0
for j in range(len(word)-1):
#만약 현재 글자가 다음 글자와 같지 않다면
if word[j] != word[j+1]:
#다음 글자부터 나머지 글자까지의 문자열을 만들고
new_word = word[j+1:]
#그 문자열에 현재 글자가 포함되어 있는지 확인한다.
if new_word.count(word[j]) > 0:
error += 1
if error == 0:
group_word +=1
print(group_word)
피드백
어렵지 않게 풀 수 있던 문제였지만 코드가 너무 복잡하고 길게 작성한 것 같다. 더 간결하게 코드를 작성하는 연습을 해야겠다.
'Baekjoon' 카테고리의 다른 글
[백준] 1254 팰린드롬 만들기 (실버2) / 문자열 (0) | 2023.04.27 |
---|---|
[백준] 7785 회사에 있는 사람 (실버5) / 시간초과 해결, 리스트, 딕셔너리 시간복잡도 (0) | 2023.04.27 |
[백준] 1543 문서 검색 (실버4) / 문자열 (0) | 2023.04.27 |
[백준] 1550 16진수 (브론즈2) / int(input(), 16)) (0) | 2023.03.22 |
[백준] 2606 바이러스 (실버3) / DFS (0) | 2023.03.08 |