Algorithm

[BOJ][Python] 10808 ์•ŒํŒŒ๋ฒณ

jihuSunbae 2024. 7. 18. 16:34

๐Ÿซก Overview

์ฒด๊ฐ ๋‚œ์ด๋„: โ˜…โ˜†โ˜†โ˜†โ˜†

์†Œ์š”์‹œ๊ฐ„: 20๋ถ„

๋ฌธ์ œ ๋ ˆ๋ฒจ: ๋ธŒ๋ก ์ฆˆ / ๋ฌธ์ œ ์œ ํ˜•: ๋‹จ์ˆœ๊ตฌํ˜„
ํ’€์ด ์ƒํƒœ:  ๋‹ต์•ˆ์ฐธ๊ณ  / ์Šค์Šค๋กœ ํ•ด๊ฒฐ
์ถ”ํ›„: ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ / ๊ฐ„๋‹จ ๋ณต์Šต/ ์™„๋ฒฝ ์ดํ•ด

 


๋ฌธ์ œ ๋งํฌ

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

 

๋‚˜์˜ ์ฝ”๋“œ

  • Counter dictionary๋กœ ํ’€์—ˆ๋‹ค. 
from collections import Counter

def main(): # counter ์‚ฌ์šฉ
    lst = input()  # ord ํ•จ์ˆ˜ : ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
    counter = Counter(lst) # ์นด์šดํ„ฐ ๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉ - ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋ฅผ key๋กœ, ๋นˆ๋„์ˆ˜๋ฅผ value๋กœ ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ๋ฐ˜ํ™˜
    counter = dict(sorted(counter.items())) # ์นด์šดํ„ฐ dict key ๊ฐ’ ๊ธฐ์ค€ ์ •๋ ฌ - ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์„œ ๋Œ€๋กœ ์ •๋ ฌ

    answer  = []
    for ascii_num in range(97, 123): # ์•ŒํŒŒ๋ฒณ a~z๊นŒ์ง€ ascii ์ˆซ์ž
        char_ = chr(ascii_num) #๋ฌธ์ž๋กœ ๋ณ€ํ™˜
        if counter.get(char_) is None:
            answer.append(0)
        else:
            answer.append(counter[char_])
    # ์ •๋‹ต ์ธ์‡„
    print(' '.join(map(str, answer)))
main()

 

๋”๋ณด๊ธฐ
๋‹จ์ˆœ dict์œผ๋กœ๋„ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค. 

def main2(): # ์ง์ ‘ ๊ตฌํ˜„ - dict ์‚ฌ์šฉ
    lst = list(map(str, input())) # ord ํ•จ์ˆ˜ : ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•จ.
    alph_dict ={} # ์•ŒํŒŒ๋ฒณ: key, ๋นˆ๋„์ˆ˜ : value

    for ascii_num in range(97, 123): # ์•ŒํŒŒ๋ฒณ a~z๊นŒ์ง€ ascii ์ˆซ์ž
        char_ = chr(ascii_num) # ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
        freq = lst.count(char_) # ๋นˆ๋„์ˆ˜ ์„ธ๊ธฐ
        alph_dict[char_] = freq # ๋”•์…”๋„ˆ๋ฆฌ์— ์ถ”๊ฐ€

    # ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ - ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋Œ€๋กœ #print(sorted(alph_dict.items()))
    alph_dict = dict(sorted(alph_dict.items()))
    # ์ •๋‹ต ์ธ์‡„
    print(' '.join(map(str, alph_dict.values())))โ€‹

 

 

๋ชจ๋ฒ” ์ฝ”๋“œ

  • ๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , lst๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ํŽธํ•˜๋‹ค. 
    • lst = [0]*26์œผ๋กœ ์ •์˜
      • key: a~z๋ฅผ 0~25์˜ ์ธ๋ฑ์Šค๋กœ ๋งค์นญ, value: ๋นˆ๋„์ˆ˜ ์ธ ๋”•์…”๋„ˆ๋ฆฌ ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ธฐ!
def reference(): # ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , lst๋ฅผ ๋”•์ฒ˜๋Ÿผ ์ด์šฉ
    input_str = input()
    lst = [0] * 26 # key: a~z๊นŒ์ง€, 0~1๋กœ ๋งค์นญ, value: ๋นˆ๋„์ˆ˜

    for ascii_num in range(97, 123): # ์•ŒํŒŒ๋ฒณ a~z๊นŒ์ง€ ascii ์ˆซ์ž
        char_ = chr(ascii_num)
        lst[ord(char_) - 97] = input_str.count(char_)
    print(' '.join(map(str, lst)))

reference()

 

 


๋ฐฐ์šด ์  

  • ์•„์Šคํ‚ค์ฝ”๋“œ ๋ฌธ์ž <-> ์ˆซ์ž ๋ณ€ํ™˜
ord(str): ๋ฌธ์ž์— ๋งž๋Š” int ๋ฐ˜ํ™˜
chr(num): ์ˆซ์ž์— ๋งž๋Š” char ๋ฐ˜ํ™˜

 

 

๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ

  • key ๊ฐ’ ๊ธฐ์ค€ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ์ฒด ์ •๋ ฌํ•˜๊ธฐ: dict(sorted(dict.items())) or dict(sorted(dict.items(), key = lambda x:x[0]))
  • values ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ์ฒด ์ •๋ ฌํ•˜๊ธฐ : dict(sorted(dict.items(),key =  lambda x:x[1]))

์ผ๋‹จ ๋‘˜๋‹ค .items()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ •๋ ฌํ•ด์•ผํ•จ์— ์ฃผ์˜ 

๋˜ํ•œ, sorted() ํ•จ์ˆ˜๋Š” ํŠœํ”Œ์„ ์ ์šฉํ•˜๋ฏ€๋กœ, ์ •๋ ฌ ํ›„ dict()์œผ๋กœ ๊ฐ์‹ธ์„œ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์— ์ค‘์š”

ages = {'jieun':25, 'mark':28, 'Amy': 17}

# key ๊ฐ’ ๊ธฐ์ค€ ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌํ•˜๊ธฐ - ์ด๋ฆ„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
result1 = sorted(ages.items()) # ํŠœํ”Œ ๋ฆฌํ„ด [('Amy', 17), ('jieun', 25), ('mark', 28)]
result1 = dict(result1) # ๋”•์…”๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
# ๊ฒฐ๊ณผ: {'Amy': 17, 'jieun': 25, 'mark': 28}

# value ๊ฐ’ ๊ธฐ์ค€ ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌํ•˜๊ธฐ - ๋‚˜์ด์ˆœ์œผ๋กœ  ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
result2 = sorted(ages.items(), key =  lambda x:x[1])
result2 = dict(result2)
# {'Amy': 17, 'jieun': 25, 'mark': 28}

 

  • ์ •๋ ฌ๋œ key ๋ฆฌ์ŠคํŠธ ์–ป๊ธฐ: sorted(dict) or sorted(dict.keys()
  • ์ •๋ ฌ๋œ value ๋ฆฌ์ŠคํŠธ ์–ป๊ธฐ: sorted(dict.values()
ages = {'jieun':25, 'mark':28, 'Amy': 17}

# ์ •๋ ฌ๋œ key ๋ฆฌ์ŠคํŠธ ์–ป๊ธฐ
result3 = sorted(ages) # ['Amy', 'jieun', 'mark']

# ์ •๋ ฌ๋œ value ๋ฆฌ์ŠคํŠธ ์–ป๊ธฐ
result4 = sorted(ages.values()) # [17, 25, 28]

 

 


๋ ˆํผ๋Ÿฐ์Šค