๐Ÿงฉ Algorithm/SWEA

[SWEA] 1221. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 5์ผ์ฐจ - GNS (Python/D3)

devCloud 2024. 10. 26. 19:07
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


ํ’€์ด

๐Ÿ’ก๋”•์…”๋„ˆ๋ฆฌ์™€ ์ •๋ ฌ ์‚ฌ์šฉ

๊ฐ ๋‹จ์–ด์˜ ์ˆœ์„œ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์˜ ๊ฐ ๋‹จ์–ด๋ฅผ ์ด ์ˆœ์„œ์— ๋”ฐ๋ผ ์ •๋ ฌํ•œ๋‹ค.

 

ํ’€์ด ๋ฐฉ๋ฒ•

  • ํ–‰์„ฑ์˜ ์ˆซ์ž ๋‹จ์–ด๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ˆœ์„œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ฐ ์ˆซ์ž ๋‹จ์–ด๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
  • ๊ฐ ๋‹จ์–ด๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ์ˆœ์„œ์— ๋งž์ถฐ ์ •๋ ฌํ•œ๋‹ค.
  • ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

โ˜… ๋”•์…”๋„ˆ๋ฆฌ ์˜ˆ์‹œ

planet_nums = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
planet_dict = dict(zip(planet_nums, range(len(planet_nums))))  # list to dict
print(planet_dict)

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

{'ZRO': 0, 'ONE': 1, 'TWO': 2, 'THR': 3, 'FOR': 4, 'FIV': 5, 'SIX': 6, 'SVN': 7, 'EGT': 8, 'NIN': 9}
  • planet_nums ๋ฆฌ์ŠคํŠธ
    • ๊ฐ ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฌธ์ž์—ด์„ 0์—์„œ 9๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.
  • dict(zip(planet_nums, range(len(planet_nums))))
    • planet_nums ์˜ ๊ฐ ์›์†Œ๋ฅผ ํ‚ค๋กœ, range(len(planet_nums)) ์—์„œ ์ƒ์„ฑ๋œ ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ’์œผ๋กœ ํ•˜์—ฌ planet_dict ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์ด๋กœ ์ธํ•ด ๊ฐ ๋ฌธ์ž์—ด์ด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž ๊ฐ’์œผ๋กœ ๋งคํ•‘๋œ๋‹ค.

 

[๋”•์…”๋„ˆ๋ฆฌ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•] ๐Ÿ”— https://dev-cloud.tistory.com/344

 

Solution

sol.1 (54,504 kb  / 237 ms)

T = int(input())
for test_case in range(1, T + 1):
    tc, tc_len = map(str, input().split())
    nums = list(map(str, input().split()))
    planet_nums = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
    
    planet_dict = dict(zip(planet_nums, range(len(planet_nums))))  # list to dict
    value_list = []
    for key in nums:
        value_list.append(planet_dict[key])  # ํ‚ค๋กœ ๊ฐ’์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’๋งŒ ์ €์žฅ
    value_list = sorted(value_list)
    
    # ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ ์ถœ๋ ฅ
    result = []
    print(f"#{test_case}")
    for i in value_list:
        result.append(planet_nums[i])
    print(*result)

 

์œ„ ์ฝ”๋“œ์—์„œ ์„ฑ๋Šฅ์„ ์กฐ๊ธˆ ๋” ๊ฐœ์„ ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ฃผ์š” ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ํ™œ์šฉํ•˜์—ฌ ์ค‘๊ฐ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ค„์ด๊ณ , sorted() ์—์„œ ์ง์ ‘ ๋ณ€ํ™˜๊ณผ ์ •๋ ฌ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•ด์ง€๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ณ€์ˆ˜ ์ƒ์„ฑ๋„ ์ค„์–ด๋“ ๋‹ค.

 

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • planet_dict์˜ ์„ ์–ธ ๋ฐฉ๋ฒ• ๊ฐ„์†Œํ™”
    • ๋ฆฌ์ŠคํŠธ์—์„œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ธ๋ฑ์Šค๋„ ๋ฐ”๋กœ ์„ค์ •ํ•˜๋„๋ก ์ˆ˜์ •
  • ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜๊ณผ sorted() ํ•จ์ˆ˜ ์‚ฌ์šฉ
    • ์ค‘๊ฐ„์— value_list๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , sorted(nums, key=lambda word: planet_dict[word])๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ฆ
  • ์ถœ๋ ฅ ํ˜•์‹ ๊ฐ„์†Œํ™”
    • print(' '.join(sorted_nums))๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌ๋œ ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ”๋กœ ์ถœ๋ ฅ

 

์ตœ์ ํ™”๋œ ์ฝ”๋“œ

T = int(input())
for test_case in range(1, T + 1):
    _, _ = input().split()  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ์™€ ๊ธธ์ด๋Š” ๋ฌด์‹œ
    nums = input().split()  # ์ˆซ์ž ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ ์ž…๋ ฅ

    # ์ˆซ์ž ๋‹จ์–ด์™€ ์ธ๋ฑ์Šค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ
    planet_nums = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
    planet_dict = {word: index for index, word in enumerate(planet_nums)}

    # planet_dict์˜ ์ธ๋ฑ์Šค์— ๋”ฐ๋ผ ์ •๋ ฌ๋œ ์ˆซ์ž ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
    sorted_nums = sorted(nums, key=lambda word: planet_dict[word])

    # ์ถœ๋ ฅ
    print(f"#{test_case}")
    print(' '.join(sorted_nums))

 

 

sol.2 (53,628 kb / 214 ms)

# ํ–‰์„ฑ์˜ ์ˆซ์ž ๋‹จ์–ด์™€ ์ˆœ์„œ๋ฅผ ๋งคํ•‘
planet_numbers = ["ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"]
order_dict = {word: index for index, word in enumerate(planet_numbers)}


# ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜
def sort_planet_numbers(words):
    # ๊ฐ ๋‹จ์–ด๋ฅผ order_dict์˜ ๊ฐ’(์ˆซ์ž)์— ๋”ฐ๋ผ ์ •๋ ฌ
    sorted_words = sorted(words, key=lambda word: order_dict[word])
    # ๊ฒฐ๊ณผ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ˜ํ™˜
    return ' '.join(sorted_words)


# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์‹คํ–‰
T = int(input())
for test_case in range(1, T + 1):
    input()  # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ์™€ ๊ธธ์ด๋ฅผ ๋ฐ›๋Š” ์ค„์€ ์ƒ๋žต
    nums = input().split()  # ์ˆซ์ž ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ ์ž…๋ ฅ
    sorted_string = sort_planet_numbers(nums)
    print(f"#{test_case}")
    print(sorted_string)

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์‹œ๊ฐ„ ๋งŽ์ด ์Ÿ์€ ๋ฌธ์ œ๋‹ค... ํ’€์ด ๋ฐฉ๋ฒ•๋„ ๋‹ค์–‘ํ•ด์„œ ์ด ๋ฌธ์ œ๋Š” ํ’€๊ธฐ ๋‚˜๋ฆ„์ด๊ตฌ๋‚˜ ์ƒ๊ฐํ–ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ด๊ฒŒ ์ œ์ผ ์ข‹์€ ํ•ด๊ฒฐ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค.

 

์‹คํ–‰ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ.

sol.1 ์œผ๋กœ ์ œ์ถœ ์ „์— ์ถœ๋ ฅ๋ฌธ์„ print(planet_nums[i], end = '') ๋ผ๊ณ  ํ–ˆ๋”๋‹ˆ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธธ์—ˆ์—ˆ๋‹ค. append() ํ•˜๋Š”๊ฒŒ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ์—ญ์‹œ ์ถœ๋ ฅ์ด ๋” ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. ์›ฌ๋งŒํ•˜๋ฉด print() ๋Š” ์ตœ๋Œ€ํ•œ ํ•œ ๋ฒˆ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์งœ์•ผ๊ฒ ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค. 

 

์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋ณ€์ˆ˜.

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฑด ๊ตณ์ด ์ด๋ฆ„์„ ๋ถ™์ผ ํ•„์š” ์—†์ด _(์–ธ๋”๋ฐ”)๋ฅผ ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค. ์•ˆ ๊ทธ๋ž˜๋„ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ง“๋Š”๋ฐ ๋‚˜๋ฆ„ ๊ณ ์‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๊ธฐ์—๋Š” ํŽธํ•˜์ง€๋งŒ ๊ฐ€๋” ์ฃผ๊ฐ์ „๋„๊ฐ€ ๋  ๋•Œ๋„ ์žˆ๋‹ค.

 

์ปดํ”„๋ฆฌํ—จ์…˜.

ํŒŒ์ด์ฌ ํŠน์ง• ๋‹ต๊ฒŒ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ์—์„œ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ๋งŽ์ด ์‚ฌ์šฉ๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ๋Š” ํ•˜์ง€๋งŒ ์•„์ง ๋…ธ๋ ฅ์ด ๋งŽ์ด ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐ ์•Š๊ณ  ์น  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ์Šต์„ ๋งŽ์ด ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 

๐Ÿ–Š๏ธ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๊ฑฐ.

enumerate์™€ lambda ์‚ฌ์šฉ๋ฒ•


 

728x90