공부하자

[BOJ/Python] 1152. 단어의 개수 본문

Algorithm/BOJ

[BOJ/Python] 1152. 단어의 개수

dev_riley 2021. 12. 12. 22:28

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

입력

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

 

출력

첫째 줄에 단어의 개수를 출력한다.

 

 

<나의 코드>

- 처음 코드

p = input().strip()
if len(p) == 0:
    print(0)
num = 0
for i in p:
    if i == ' ':
       num += 1
print(num + 1)

- 최종 코드 1 (72 ms)

p = input().strip()
if len(p) == 0:
    print(0)
else:
    print(p.count(' ')+1)

- 최종 코드 2 (140ms)

p = input().strip()
num = 0
if len(p) == 0:
    print(0)
else:
    for i in p:
        if i == ' ':
            num += 1
    print(num + 1)

- 최종 코드 3 (+split(), 80ms)

print(len(input().split()))

 

<REVIEW>

이 문제의 정답률이 무려 29%이다. 처음에는 이게 뭐지? 싶었고, 막상 풀고나니 이렇게 쉬운데??라고 생각을 해서 제출을 하니 '틀렸습니다!' 라고 떴다. 그 후 2번 더 시도했음에도(위의 처음 코드는 출력초과..) 계속 풀지 못해서 다른 분들의 코드를 참고하였다. 대부분 split()을 사용하셨다.(split은 사실 한 줄로 끝낼 수 있다. 최종코드3) 나는 처음과 마지막 공백을 다 없앤 후, 공백의 갯수를 세 1을 더해주는 방법으로 하고 싶어 strip()으로 사용하는 방식을 찾고 싶었고 참고해서 만든 것이 최종 코드 1이다. 처음 코드는 왜 출력초과가 떴을까 생각을 하던 중, 맨 처음에 길이가 0인 것은 0을 출력하고 끝내야하는데, 모든 입력값을 매번 if문과 for문을 다 돌려버리니 아마 출력초과가 나오지 않았을까 싶다. 그래서 else로 똑같은 처음 코드1의 for문을 넣으니 이것(최종 코드2) 또한 통과를 했다. 하지만 시간이 최종 코드1보다 2배가량 긴 거 보니 굳이 for문을 할 필요없이 최종 코드 1처럼 count로 처리하는 것이 베스트인 것 같다. 이래서 다양한 코드를 확인해야 하나보다. 

 

<출처>

https://www.acmicpc.net/problem/1152

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/python] 11650. 좌표 정렬하기  (0) 2022.04.25
[BOJ/Python] 10989. 수 정렬하기 3  (0) 2022.04.22
[BOJ/Python] 1157. 단어공부  (0) 2021.12.12
[BOJ/Python] 10818. 최소, 최대  (0) 2021.10.25
[BOJ/Python] 2562. 최댓값  (0) 2021.10.25
Comments