문제
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
알고리즘
- 반복문을 통해 단어를 확인한다.
- 반복문을 통해 각 단어들의 문자를 확인한다.
- 현재 비교하고 있는 문자와 다음 문자들을 확인하면서 그룹 단어의 유무를 판단한다.
코드
import sys
n = int(sys.stdin.readline())
cnt = 0
# 반복문을 통해 단어를 확인
for _ in range(n):
word = list(map(str, sys.stdin.readline().strip()))
stack = [word[0]] # 스택을 이용하여 문제를 수행
flag = True # 그룹 단어의 유무
# 반복문을 통해 스택에 있는 문자와 비교하는 문자를 확인
for i in range(1, len(word)):
# 스택에 담겨있는 문자가 현재 비교하고 있는 문자와 다르고 스택에 현재 비교하고 있는 문자가 있다면
# 그룹 단어가 될 수 없다.
if stack[i - 1] != word[i]:
if word[i] in stack:
flag = False
break
# 스택에 현재 비교한 문자를 추가한다.
stack.append(word[i])
# 그룹 단어의 유무에 따라 카운트
if flag:
cnt += 1
print(cnt)
다른 사람의 성공 코드
import sys
n = int(sys.stdin.readline())
cnt = n
# 반복문을 통해 단어를 확인
for _ in range(n):
word = list(map(str, sys.stdin.readline().strip()))
# 반복문을 통해 현재 문자와 다음 문자를 비교
for i in range(len(word) - 1):
# 현재 문자와 다음 문자가 같으면 패스
if word[i] == word[i + 1]:
pass
# 현재 문자가 다음 문자중에 있으면 그룹 단어가 될 수 없다.
elif word[i] in word[i + 1:]:
cnt -= 1
break
print(cnt)
다른 사람의 성공 코드와 나의 코드를 비교했을 때 시간과 메모리는 같았지만 코드 길이가 달랐다. 다른 사람의 성공 코드가 더 직관적이라 이해하기 더 쉬울 것 같다.
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 11718번(파이썬): 그대로 출력하기 (0) | 2021.12.22 |
---|---|
[baekjoon] 백준 2941번(파이썬): 크로아티아 알파벳 (0) | 2021.12.21 |
[baekjoon] 백준 1157번(파이썬): 단어 공부 (0) | 2021.12.19 |
[baekjoon] 백준 2675번(파이썬): 문자열 반복 (0) | 2021.12.18 |
[baekjoon] 백준 1152번(파이썬): 단어의 개수 (0) | 2021.12.17 |