통과 코드
T = int(input())
# 구두점 저장
end_item = ['.', '!', '?']
for tc in range(1,1+T):
# 문장의 개수
n = int(input())
# 문장
sentence = list(map(str,input().split()))
# 이름의 개수
cnt = 0
# 결과 저장 리스트
res = []
for q in sentence:
# 단어의 길이가 1이면 대문자인지 아닌지만 확인
if len(q) == 1:
if q[0].isupper():
cnt += 1
# 단어의 길이가 1 이상인 경우
else:
# 단어의 마지막 위치에 있는 것이 구두점 '.' , '!', '?' 가 아닌 경우
if q[-1] not in end_item:
# 가장 앞 글자가 대문자이고
# 나머지가 알파벳이면서 소문자인 경우
if q[0].isupper() and q[1:].isalpha() and q[1:].islower():
cnt += 1
# 단어의 마지막 위치에 있는 것이 구두점인 경우
else:
# 가장 앞 글자가 대문자이고
# 구두점 앞 까지 알파벳이고 소문자인 경우
if q[0].isupper() and q[1:len(q)-1].isalpha() and q[1:len(q)-1].islower():
cnt += 1
# 결과 저장
res.append(cnt)
# cnt 초기화
cnt = 0
print('#{}'.format(tc),*res)
그 외
문제 풀이를 위한 아이디어
1. 이름이 될 수 있는 조건을 잘 이해하고 설정해야 함
조건1. 가장 앞 글자가 대문자여야 함
조건2. 나머지 글자는 알파벳 소문자여야 함
조건3. 마지막 구두점이 '.', '!', '?' 인 경우에도 이름으로 인정
=> 조건3을 사용하려면 우선 조건2까지가 모두 충족해야 가능
ex) tc의 LoL!이나 Rhs0266.가 이름으로 인정받지 못하는 이유는 조건2를 충족시키지 못하기 때문
조건4. 알파벳 하나로 이루어진 단어인 경우, 대문자이면 이름으로 인정
제 경우에는 조건3을 마지막에 구두점이 있는 경우에는 무조건 이름으로 인정한다고 잘못 이해해서 시간을 낭비함 ㅠㅠ
초기 코드(런타임 오류)
가장 먼저 떠올린 것은 아스키 코드를 사용해서 대문자와 소문자를 구분하는 방법
+ if 문을 사용해서 모든 조건을 작성함 => 런타임오류 발생
T = int(input())
for tc in range(1,1+T):
# 문장의 개수
n = int(input())
# 문장
sentence = list(map(str,input().split()))
cnt = 0
res = [0]*n
idx = -1
for word in sentence:
# 알파벳 하나로 이루어져 있으며, 대문자인 경우
if len(word) == 1:
if 65 <= ord(word[q]) <= 90:
cnt += 1
# 여러 알파벳으로 이루어져 있는 경우
else:
if word[-1] == '.' or word[-1] == '!' or word[-1] == '?':
idx += 1
res[idx] = cnt
for q in range(len(word)):
# 가장 앞 알파벳
if q == 0:
# 대문자인 경우, 통과
if 65 <= ord(word[q]) <= 90:
pass
# 대문자 아닌 경우는 이름이 될 가능성이 없으므로 끝내기
else:
break
# 가장 마지막 알파벳
elif q == len(word)-1:
# 구두점인 경우(한 문장의 끝)
if word[q] == '.' or word[q] == '!' or word[q] == '?':
cnt += 1
# res에 해당 문장의 이름 개수 저장
res[idx] += 1
# cnt값 초기화
cnt = 0
# 소문자이면
elif 97 <= ord(word[q]) <= 122:
cnt += 1
# 그 외의 경우
else:
# 소문자인 경우 통과
if 97 <= ord(word[q]) <= 122:
pass
else:
break
print('#{}'.format(tc),*res)
=> 문제의 원인은 잘 몰랐고, 그래서 그냥 if문을 최소화하고 아스키코드를 사용하지 않기로 결정
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] S/W 문제해결 기본 회문1 - PYTHON #1215 (0) | 2021.01.24 |
---|---|
[SWEA 코딩] S/W 문제해결 기본 View - PYTHON #1206 (0) | 2021.01.23 |
[SWEA 코딩] S/W 문제해결 기본 GNS - PYTHON #1221 (0) | 2021.01.20 |
[SWEA 코딩] 진기의 최고급 붕어빵 - PYTHON #1860 (0) | 2021.01.19 |
[SWEA 코딩] 준환이의 운동관리 - PYTHON #3431 (0) | 2021.01.17 |