문제 출저: https://www.acmicpc.net/problem/1152
결론은 모든 예외를 신중히 고려해보자는 것이다.
여러 번의 시행착오 끝에 예외를 처리할 수 있었다.
코드를 짠 순서는 다음과 같다.
1. 입력값을 모두 받아서 리스트화 시키기(문자별로 쪼개기) 2. 각 문자를 for으로 돌려서 띄어쓰기 갯수 세기 3. 문장 안에 단어의 갯수 이므로 띄어쓰기 갯수 + 1을 출력하기 |
첫번째 처리 못한 예외: 문장 앞과 뒤에 들어간 공백이 있을 때 공백은 취급하지 않는다.
> 문장 맨 앞과 맨 뒤는 당연히 공백이 없을 거라 생각했다. 당연시 여기지 말고 문제 조건 꼼꼼히 읽어보기
두번째 처리 못한 예외: 문장 자체가 공백 하나 일 때 sentence = [' '] 1이 나오지 않고 0이 나오도록 예외 처리 해줘야 한다.
> 이 예외는 솔직히 찾기 힘들었다. 문제 예시 케이스 모두 잘 나왔고, 90%에서 정답이 틀렸습니다 나오니..
다른 사람들의 풀이를 보면서 알게 되었다.
결과
#BOJ_1142
enter = input()
sentence = list(enter)
count = 0
space_count = 0
for alphabet in sentence:
# alphabet이 sentence 리스트의 첫, 마지막 원소가 아니라면
if alphabet == " ":
if count != 0 and count != len(sentence) - 1:
space_count += 1
# print(count, space_count)
count += 1
# print(sentence)
# 문장 자체가 공백인 경우 생각해줘야 한다구!!!
if enter == " ":
print("0")
else:
print(space_count + 1)
맞았습니다!가 뜸
그렇다면 다른 사람 풀이는 어떨까.
split를 이용하여 정말 간결하게 풀었다.
간결한 풀이:
print(len(input().split()))
이 한 줄이 끝.
input() 따로 받아서 list 화 할 필요 없었고
바로 split()를 쓰면 되었다.
a = input().split()
print(a)
a는 공백을 기준으로 각 문자열을 원소로 한 리스트를 나타낸다.
결과는 ['The', 'first', 'character', 'is', 'a', 'blank']
즉 리스트 a의 길이인 원소의 갯수 = 단어의 갯수를 출력함을 알 수 있다.
split(" ")과 split()의 차이를 잘 정리해놓은 블로그이다.
결론 문제 조건의 모든 경우 수를 따져서 예외 처리할 것. split()은 공백 갯수 상관없이 무조건 1개로 처리, 탭, 엔터도 처리해준다. split(" ")은 공백 각각을 1개씩 처리 |
읽어주셔서 감사합니다.
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 나이순 정렬 10814, python (0) | 2023.01.06 |
---|---|
[백준] 2920번 음계, python (0) | 2023.01.06 |
[백준] 브론즈4에서 한 달 티어 목표 (0) | 2023.01.05 |
코드업 1099번문제 - 개미 경로 찾기 (0) | 2022.06.22 |
[백준] 선수과목 14567번 풀이 - 아직 못 품;; (0) | 2022.06.02 |