SWEA 7675. 통역사 성경이

하얀족제비·2021년 7월 10일
0

SWEA

목록 보기
4/6

접근 방식

아............
최근들어 짜증났던 문제 중 하나이다.

  1. 전체 문장 데이터 인풋 값을 받아올 때 strip()를 해줘야 했다. 이거 때문에 통과가 안되었는데, 사실 안붙여도 예제는 통과가 되었지만 어째서인지 제출을 하면 정답이 0개였다. 붙였더니 통과.. 이유는 아직 잘 모르게따..

  2. 전체 문장을 받아오면서 '?'와 '!'를 '.'으로 replace해주었다.

  3. 그리고 '.'을 기준으로 전체 문장을 각각의 문장으로 split 해주었다.

  4. split한 각각의 문장을 반복문으로 순회하는데

  5. 각각의 문장을 다시한번 split하여 단어 단위로 나누었다.

  6. 그리고 단어를 이제 한 글자 단위로 반복문을 도는데,
    이때 첫글자가 대문자이고 단어 안에 숫자나 또 다른 대문자는 없는지 찾아주었고

  7. 모든 조건에 부합하면 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))))
profile
안녕하세요~ 개발을 꿈꾸는 하얀족제비입니다!

0개의 댓글