Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SW Expert Academy
- leetcode
- 백준
- Baekjoon
- 파이썬
- 프로그래머스 파이썬
- 자연어처리
- ChatGPT
- Git
- programmers
- 캐치카페
- Docker
- 맥북
- 코로나19
- 더현대서울 맛집
- 편스토랑 우승상품
- PYTHON
- hackerrank
- Real or Not? NLP with Disaster Tweets
- github
- ubuntu
- 데이콘
- gs25
- 편스토랑
- dacon
- AI 경진대회
- 금융문자분석경진대회
- Kaggle
- 프로그래머스
- 우분투
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 25775번 : Letter Frequency (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 Letter Frequency 입니다.
👨🏻💻 문제 풀이
1. 여러 문자열의 각 위치에 존재하는 알파벳 빈도수를 계산하여 저장하는 dictionary 를 만드는 함수를 만들어 줍니다.
from collections import Counter
def letter_frequency(word_list):
max_word_len = max([len(word) for word in word_list])
freq_dict = {}
for letter_idx in range(max_word_len):
freq_dict[letter_idx + 1] = Counter([
word[letter_idx:letter_idx+1] for word in word_list
if word[letter_idx:letter_idx+1] != ''
]).most_common()
return freq_dict
- 여러 문자열 중 가장 긴 문자열의 길이를 구하기
max_word_len = max([len(word) for word in word_list])
- 가장 긴 문자열의 길이만큼 반복문을 돌면서 처음부터 끝까지 모든 문자열의 각 위치의 알파벳을 꺼내와 저장한 다음 collections 의 Counter 를 활용하여 빈도수를 계산
for letter_idx in range(max_word_len):
freq_dict[letter_idx + 1] = Counter([
word[letter_idx:letter_idx+1] for word in word_list
if word[letter_idx:letter_idx+1] != ''
]).most_common()
- 빈도수를 계산한 값을 위치index를 key값으로 하여 dictionary 에 저장
2. 1번에서 만든 함수를 활용하여 각 위치에 가장 많이 등장한 알파벳을 모아 문자열로
def make_answer_string(freq_dict):
answer_string = []
for freq_num in freq_dict.keys():
freq_str = " ".join([
f"{freq_num}:",
" ".join(sorted([freq_item[0] for freq_item in freq_dict[freq_num] if freq_dict[freq_num][0][1] == freq_item[1]]))
])
answer_string.append(freq_str)
return "\n".join(answer_string)
- 1번에서 만든 dictionary 에서 하나씩 꺼내오면서 가장 많이 등장한 알파벳만 남겨서 정답 문자열로 생성
for freq_num in freq_dict.keys():
freq_str = " ".join([
f"{freq_num}:",
" ".join(sorted([freq_item[0] for freq_item in freq_dict[freq_num] if freq_dict[freq_num][0][1] == freq_item[1]]))
])
👨🏻💻 코드 ( Solution )
from collections import Counter
def letter_frequency(word_list):
max_word_len = max([len(word) for word in word_list])
freq_dict = {}
for letter_idx in range(max_word_len):
freq_dict[letter_idx + 1] = Counter([
word[letter_idx:letter_idx+1] for word in word_list
if word[letter_idx:letter_idx+1] != ''
]).most_common()
return freq_dict
def make_answer_string(freq_dict):
answer_string = []
for freq_num in freq_dict.keys():
freq_str = " ".join([
f"{freq_num}:",
" ".join(sorted([freq_item[0] for freq_item in freq_dict[freq_num] if freq_dict[freq_num][0][1] == freq_item[1]]))
])
answer_string.append(freq_str)
return "\n".join(answer_string)
if __name__ == "__main__":
word_list = []
for _ in range(int(input())):
word = input()
word_list.append(word)
freq_dict = letter_frequency(word_list=word_list)
print(make_answer_string(freq_dict=freq_dict))
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[Programmers] 등수 매기기 (Python) (0) | 2023.02.09 |
---|---|
[BaekJoon] 27433번 : 팩토리얼 2 (Python) (0) | 2023.02.06 |
[Programmers] 둘만의 암호 (Python) (0) | 2023.02.04 |
[BaekJoon] 27324번 : ゾロ目 (Same Numbers) (Python) (0) | 2023.02.03 |
[BaekJoon] 27331번 : 2 桁の整数 (Two-digit Integer) (Python) (0) | 2023.02.02 |
Comments