CK 027 | νŠœν”Œ(python)

This Is Empty.Β·2021λ…„ 10μ›” 1일
0

codekata

λͺ©λ‘ 보기
27/35

문제

πŸ”—[2019 카카였 개발자 겨울 인턴십 | νŠœν”Œ]
μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(tuple)이라고 ν•©λ‹ˆλ‹€. n개의 μš”μ†Œλ₯Ό 가진 νŠœν”Œμ„ n-νŠœν”Œ(n-tuple)이라고 ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • (a1, a2, a3, ..., an)
    νŠœν”Œμ€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  1. μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ex : (2, 3, 1, 2)
  2. μ›μ†Œμ— 정해진 μˆœμ„œκ°€ 있으며, μ›μ†Œμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ νŠœν”Œμž…λ‹ˆλ‹€. ex : (1, 2, 3) β‰  (1, 3, 2)
  3. νŠœν”Œμ˜ μ›μ†Œ κ°œμˆ˜λŠ” μœ ν•œν•©λ‹ˆλ‹€.
    μ›μ†Œμ˜ κ°œμˆ˜κ°€ n개이고, μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œ (a1, a2, a3, ..., an)이 μ£Όμ–΄μ§ˆ λ•Œ(단, a1, a2, ..., an은 μžμ—°μˆ˜), μ΄λŠ” λ‹€μŒκ³Ό 같이 집합 기호 '{', '}'λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
    예λ₯Ό λ“€μ–΄ νŠœν”Œμ΄ (2, 1, 3, 4)인 경우 μ΄λŠ”

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
    와 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 집합은 μ›μ†Œμ˜ μˆœμ„œκ°€ λ°”λ€Œμ–΄λ„ μƒκ΄€μ—†μœΌλ―€λ‘œ

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}

  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
    λŠ” λͺ¨λ‘ 같은 νŠœν”Œ (2, 1, 3, 4)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

νŠΉμ • νŠœν”Œμ„ ν‘œν˜„ν•˜λŠ” 집합이 λ‹΄κΈ΄ λ¬Έμžμ—΄ sκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, sκ°€ ν‘œν˜„ν•˜λŠ” νŠœν”Œμ„ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • s의 κΈΈμ΄λŠ” 5 이상 1,000,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • sλŠ” μˆ«μžμ™€ '{', '}', ',' 둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • μˆ«μžκ°€ 0으둜 μ‹œμž‘ν•˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • sλŠ” 항상 μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œμ„ μ˜¬λ°”λ₯΄κ²Œ ν‘œν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • sκ°€ ν‘œν˜„ν•˜λŠ” νŠœν”Œμ˜ μ›μ†ŒλŠ” 1 이상 100,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • return ν•˜λŠ” λ°°μ—΄μ˜ 길이가 1 이상 500 μ΄ν•˜μΈ 경우만 μž…λ ₯으둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œ

from itertools import chain
def solution(s):
    answer = []
    s = list(chain(*[i.split(",") for i in sorted(s[2:-2].split("},{"), key=len)]))
    
    for num in s :
        if int(num) not in answer :
            answer.append(int(num))
    
    return answer

λ‹€μŒμ˜ 과정에 따라 ν’€μ΄ν•˜μ˜€λ‹€.

  1. input이 {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}처럼 μ–‘ 끝에 κ΄„ν˜Έκ°€ λΆ™μ–΄μžˆμœΌλ―€λ‘œ μ–‘ 끝 κ΄„ν˜Έλ₯Ό μ œκ±°ν•˜κ³ , μ‚¬μ΄μ˜ κ΄„ν˜Έλ₯Ό split으둜 μ œκ±°ν•œλ‹€. 그리고 짧은 μš”μ†ŒλΆ€ν„° μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜κΈ° μœ„ν•΄ key=len을 μ‚¬μš©ν•œλ‹€

(1) result : ['3', '2,3', '4,2,3', '2,3,4,1']

2.(1)의 κ²°κ³Όμ—μ„œ μ‰Όν‘œλ₯Ό μ œκ±°ν•˜κΈ°μœ„ν•΄ 각 μš”μ†Œμ— λΆ™μ–΄μžˆλŠ” ,을 itertools | chain κ³Ό split(",")으둜 μ œκ±°ν•˜μ—¬ λ¦¬μŠ€νŠΈμ— λ‹΄μ•„μ€€λ‹€.

(2) result : ['3', '2', '3', '4', '2', '3', '2', '3', '4', '1']

  1. answer에 μ—†λ‹€λ©΄ μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ‹΄μ•„μ£Όκ³  λ¦¬ν„΄ν•œλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

import re
from collections import Counter

def solution(s):

    s = Counter(re.findall('\d+', s))
    return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))

사싀 μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜λ €κ³  ν–ˆλŠ”λ°, 아직은 reλ©”μ†Œλ“œ 곡뢀가 λΆ€μ‘±ν•œ 것 κ°™λ‹€. μ—­μ‹œ λ§Žμ€ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό 봐야 μ‹œμ•Όκ°€ λ„“μ–΄μ§€λŠ” 것 κ°™λ‹€!

profile
Convinced myself, I seek not to convince.

0개의 λŒ“κΈ€