https://www.acmicpc.net/problem/1316
문제
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.
출력
첫째 줄에 그룹 단어의 개수를 출력한다.
n = int(input())
for i in range(n):
word = input()
for j in range(len(word) - 1):
if word[j] == word[j + 1]: # 연속해서 나타나면
pass
elif word[j] in word[j + 1:]: # 떨어져서 나타나면
n -= 1
break
print(n)
이 문제는 문자열을 n개 만큼 입력받고 각 알파벳 요소에 접근해서 중복해서 나타나는 것이 연속인지 아니면 떨어져있는지 확인하여 단어로 인정하는 문자열의 개수를 구하는 것이다.
처음에 문자열을 입력받을 때 리스트로 입력받아야한다고 생각했다. 그런데 그렇게 하게 되면 각 알파벳에 접근하는 것이 어려워졌었다. 그래서 단순히 for문을 통해 문자열을 하나씩 입력 받도록 하였다.
단어는 알파벳이 연속해서 나타나거나 이웃하는 단어가 다르면 되고, 단 똑같은 알파벳이 떨어져 있으면 단어로 인정되지 않는다. 이를 구현하기 위해서 if문을 통해 연속해서 나타나는 경우는 pass하고 떨어져서 나타나면 입력받은 개수를 1씩 줄이는 방식으로 작성하였다.
이 문제를 풀면서 막막했던 부분은 같은 문자가 떨어져서 나타나는 경우를 어떻게 구현해야하는가였다. word안에 중복되는 것이 떨어져있다는 것을 코드로 구현하는 방법이 생각나지 않았다. 그래서 구글링을 통해 알아낸 방법은 'word[j]가 word[j+1:] 에 존재한다면'이라는 것이다. 문자열 슬라이싱을 통해 해당 문자가 word라는 문자열에서 해당 문자열과 이웃하는 문자의 다음 문자부터 끝까지 살펴보고 그 안에서 해당 문자와 같은 문자가 나타나는 경우를 구현한 것이다. 이를 통해 문자열 슬라이싱의 활용법에 대해서 다시 한 번 깨닫게 되었다.
'Algorithm 문제 풀이 > python' 카테고리의 다른 글
[파이썬] 백준 10872번 (0) | 2022.03.07 |
---|---|
[파이썬] 백준 2775번 (0) | 2022.03.06 |
[파이썬] 백준 10250번 (0) | 2022.02.28 |
[파이썬] 백준 2941번 (0) | 2022.02.28 |
[python] 백준 2675번 (0) | 2022.02.17 |