관리 메뉴

솜씨좋은장씨

[BaekJoon] 25775번 : Letter Frequency (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 25775번 : Letter Frequency (Python)

솜씨좋은장씨 2023. 2. 5. 12:15
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 Letter Frequency 입니다.

 

25775번: Letter Frequency

Print each position and the letter(s) that occur the most in that position, following the format illustrated in Sample Output. Note that each output line starts with a number, immediately followed by a colon (‘:’), followed by a space, followed by a le

www.acmicpc.net

👨🏻‍💻 문제 풀이

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))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments