일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 더현대서울 맛집
- 금융문자분석경진대회
- 편스토랑 우승상품
- AI 경진대회
- Real or Not? NLP with Disaster Tweets
- 데이콘
- ChatGPT
- dacon
- leetcode
- 캐치카페
- PYTHON
- github
- Docker
- 코로나19
- 편스토랑
- hackerrank
- Kaggle
- 백준
- 프로그래머스 파이썬
- 파이썬
- Baekjoon
- ubuntu
- gs25
- 프로그래머스
- 맥북
- 우분투
- 자연어처리
- programmers
- Git
- SW Expert Academy
- Today
- Total
솜씨좋은장씨
[JUNGOL] 1516번 : 단어 세기 (Python) 본문
코딩 1일 1문제! 오늘의 문제는 정올의 단어 세기 입니다.
Solution
from collections import Counter
while True:
input_str = input()
if input_str == "END":
break
words = input_str.split(" ")
word_cnt_items = sorted(Counter(words).items(), key=lambda x: x[0])
for item in word_cnt_items:
print(f"{item[0]} : {item[1]}")
Solution 풀이
collections의 Counter를 활용하여 풀어보았습니다.
while 반복문 안에서 문자열을 입력 받습니다.
반복문은 입력받은 문자열이 "END" 일 경우에 종료합니다.
입력받은 문자열을 공백으로 split하여 words 리스트로 만들어주고
이를 collections의 Counter를 통하여 각 단어의 개수를 하나씩 세어줍니다.
그 다음 .items()를 통해 (단어, 카운팅한 횟수) 형식의 데이터를 저장한 리스트로 만들어준 다음
단어 순서를 기준으로 sorting한 뒤에!
단어 : 횟수 이렇게 출력해주도록 하면 끝!
이렇게 풀고 나니 collections를 사용하지 않고 직접 카운팅을 하도록 하면?
두 방법의 속도차이는 얼마나 날까? 라는 생각이 들었습니다.
Solution 2
while True:
input_str = input()
count_dict = dict()
if input_str == "END":
break
words = input_str.split(" ")
for word in words:
if word not in count_dict.keys():
count_dict[word] = 0
count_dict[word] += 1
count_items = sorted(count_dict.items(), key=lambda x: x[0])
for item in count_items:
print(f"{item[0]} : {item[1]}")
똑같이 "END"가 입력될 때 까지 while 반복문을 돌면서 문자열을 입력 받고
입력받은 문자열을 공백으로 split하여 words 리스트로 만들어줍니다.
그다음 words리스트에서 단어를 하나씩 꺼내고
카운팅한 정보를 담아둘 count_dict라는 dictionary에 존재하는지 존재하지 않는지 확인합니다.
만약에 존재하지 않는다면 해당 단어를 키로 등록하고 0을 넣어줍니다.
그리고 하나 카운팅을 합니다.
그 뒤에는 아까와 동일하게 단어를 기준으로 sorting 하고 출력하면 끝!
제출하고 두 방식의 속도 차이를 비교해 보았는데 3ms 정도의 차이밖에 나지 않았습니다.
이것 보다 더 효율적인 방법으로 풀 수 있는 방법이 있다면!
언제든 댓글 부탁드립니다~
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[CodeUp] 2807번 : 대표 문자열 (Python) (0) | 2021.05.19 |
---|---|
[JUNGOL] 2857번 : 세로읽기 (Python) (0) | 2021.05.18 |
[BaekJoon] 3009번 : 네 번째 점 (Python) (0) | 2021.05.16 |
[BaekJoon] 1259번 : 팰린드롬수 (Python) (0) | 2021.05.15 |
[BaekJoon] 10816번 : 숫자 카드 2 (Python) (0) | 2021.05.14 |