일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 딥다이브
- Execution context
- react
- Deep Dive
- 정렬
- blockchain
- Python
- 프로퍼티
- Interview
- 함수
- nft
- 알고리즘
- 리액트
- 실행 컨텍스트
- 변수
- git pull
- frontend
- var
- Algorithm
- Queue
- 솔리디티
- Javascript
- let
- 자바스크립트
- 파이썬
- BOJ
- 백준
- 클로저
- 블록체인
- solidity
- Today
- Total
공부하자
[BOJ/Python] 1152. 단어의 개수 본문
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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로 처리하는 것이 베스트인 것 같다. 이래서 다양한 코드를 확인해야 하나보다.
<출처>
'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 |