250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 2 (νŠœν”Œ) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 2 (νŠœν”Œ)

γ…… γ…œ γ…” γ…‡ 2022. 11. 1. 16:48
728x90

1. 문제 μ„€λͺ…

μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(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 ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

2. μ œν•œ 쑰건

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

 

 

 

 

 

 

3. λ‚΄ 풀이

import re
from collections import Counter
def solution(s):
    s = re.split('{|}|,',s)
    s = [re.sub(r'[^0-9]', '', x) for x in s if x and x != ',']
    s = Counter(s)
    s = sorted(s.items(), key=lambda i: i[1], reverse=True)
    return [int(x[0]) for x in s]

 

- μ ‘κ·Ό 방법 : κ°€μž₯ 많이 λ“±μž₯ν•˜λŠ” 숫자 μˆœμ„œλŒ€λ‘œ 리슀트λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜

1. λ¬Έμžμ—΄μ„ ' { , }, ,' 둜 λΆ„ν• ν•΄μ€Œ

2. λ¬Έμžμ—΄μ— μ‘΄μž¬ν•˜λŠ” μˆ«μžλ§Œμ„ μΆ”μΆœν•˜κ³  λΉ„μ–΄μžˆλŠ” λ¬Έμžμ—΄ 제거

3. μˆ«μžλ“€μ΄ 각각 λͺ‡λ²ˆ μžˆλŠ”μ§€ 카운트

4. λ§Žμ€ 숫자 μˆœμ„œλ‘œ μ •λ ¬

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

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

import re
from collections import Counter

 

1. re.findall('\d+') : λ¬Έμžμ—΄μ˜ 숫자λ₯Ό μ°Ύμ•„μ„œ 리슀트둜 λ°˜ν™˜ν•΄μ€Œ

re.findall('\d') : λ¬Έμžμ—΄μ˜ 숫자λ₯Ό λ°˜ν™˜ν•΄μ£Όμ§€λ§Œ 111 같은 숫자λ₯Ό 1, 1, 1 ν˜•μ‹μœΌλ‘œ λ”°λ‘œ λ°˜ν™˜ ν•΄μ€Œ

2. λ”•μ…”λ„ˆλ¦¬ μ •λ ¬ ν›„ λ°˜ν™˜

 

 

def solution(s):
    answer = []

    s1 = s.lstrip('{').rstrip('}').split('},{')

    new_s = []
    for i in s1:
        new_s.append(i.split(','))

    new_s.sort(key = len)

    for i in new_s:
        for j in range(len(i)):
            if int(i[j]) not in answer:
                answer.append(int(i[j]))

    return answer

1. λ¬Έμžμ—΄μ˜ {, }, },{을 μ œκ±°ν•¨

2. λ¬Έμžμ—΄ sλ₯Ό ','둜 λ‚˜λˆˆν›„ new_s 리슀트 생성

3. μƒˆλ‘œμš΄ 리슀트의 μ›μ†Œμ˜ 개수 수둜 μ •λ ¬

4. μ •λ ¬λœ μ›μ†Œμ—μ„œ μ—†λŠ” 숫자 μˆœμ„œλŒ€λ‘œ μΆ”κ°€ν›„ λ°˜ν™˜

728x90
Comments