SWEA 7675. 통역사 성경이
접근 방식
아............
최근들어 짜증났던 문제 중 하나이다.
-
전체 문장 데이터 인풋 값을 받아올 때 strip()를 해줘야 했다. 이거 때문에 통과가 안되었는데, 사실 안붙여도 예제는 통과가 되었지만 어째서인지 제출을 하면 정답이 0개였다. 붙였더니 통과.. 이유는 아직 잘 모르게따..
-
전체 문장을 받아오면서 '?'와 '!'를 '.'으로 replace해주었다.
-
그리고 '.'을 기준으로 전체 문장을 각각의 문장으로 split 해주었다.
-
split한 각각의 문장을 반복문으로 순회하는데
-
각각의 문장을 다시한번 split하여 단어 단위로 나누었다.
-
그리고 단어를 이제 한 글자 단위로 반복문을 도는데,
이때 첫글자가 대문자이고 단어 안에 숫자나 또 다른 대문자는 없는지 찾아주었고 -
모든 조건에 부합하면 cnt + 1을 해주었다.
(+) 추가적으로 any는 iterable한 자료형의 요소 중 하나라도 True일 경우 True를 돌려준다.
# 예시
example = [False, False, False]
any(example) # False
example2 = [True, False, True]
any(example2) # True
example3 = [1, 2, 3]
any(ex == 1 for ex in example3) # True
해당 문제에서는 단어를 한글자씩 살펴보는데 그 중 하나라도 숫자가 있다면 True를 반환해준다.
혹은, 해당 단어 첫글자 이후(words[1:])에 대문자가 또 존재하면 True를 반환해준다.
이걸 활용해서 숫자가 들어있는 단어는 걸러주도록 조건문을 걸었다.
코드
for t in range(1, int(input())+1):
N = int(input())
# 전체 문장(문단) 데이터 받기
# '?', '!'은 '.'으로 바꾸고, '.'기준으로 스플릿
pharagraph = list(input().strip().replace('?','.').replace('!','.').split('.'))
res = []
# 문단에서 '.'기준으로 나눈 문장을 순회
for sentence in pharagraph:
# 나눠진 문장이 공백이 아니라면
if sentence:
# 단어 단위로 스플릿
tmp = sentence.split()
cnt = 0
# 단어를 글자 단위로 탐색
for word in tmp:
# 첫글자가 대문자이면
if word[0].isupper():
# 기타 숫자, 대문자 거르는 조건
if not any(letter.isdigit() for letter in word) and not any(letter.isupper() for letter in word[1:]):
# 해당하면 카운트
cnt += 1
# 결과 리스트에 넣어주기
res.append(cnt)
print('#{} {}'.format(t, ' '.join(map(str, res))))
Author And Source
이 문제에 관하여(SWEA 7675. 통역사 성경이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@meganatc7/SWEA-7675.-통역사-성경이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)