본문 바로가기
Computer Science/Algorithm

[1단계] 백준 1152번 단어의 개수, python

by 9루트 2023. 1. 5.

https://solved.ac/class

 

solved.ac

알고리즘 문제해결 학습의 이정표 🚩 Baekjoon Online Judge 문제들의 난이도 및 티어 정보를 제공하는 사이트입니다.

solved.ac

 

문제 출저: 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()의 차이를 잘 정리해놓은 블로그이다.

https://somjang.tistory.com/entry/Python-%EB%AC%B8%EC%9E%90%EC%97%B4-split-%EA%B3%BC-split-%EC%B0%A8%EC%9D%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

[Python] 문자열 split() 과 split(" ") 차이 알아보기!

최근에 일을 하면서 split( ) 과 split(" ") 의 결과가 다르다는 것을 어렴풋이 들은 기억이 있었습니다. 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문

somjang.tistory.com

결론
문제 조건의 모든 경우 수를 따져서 예외 처리할 것.

split()은 공백 갯수 상관없이 무조건 1개로 처리, 탭, 엔터도 처리해준다.
split(" ")은 공백 각각을 1개씩 처리

 

읽어주셔서 감사합니다.