Algorithm/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] νŠœν”Œ/ 파이썬/ Python/ 2019 카카였 개발자 겨울 인턴십

rmsidgkrl 2020. 8. 25. 22:00
728x90
λ°˜μ‘ν˜•

πŸ’‘solutions )

βœ… ',{'λ₯Ό κΈ°μ€€μœΌλ‘œ μ§‘ν•©λ³„λ‘œ λŠμ–΄μ€€λ‹€(split)

βœ… 문자 길이λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•œλ‹€(sort)

βœ… 집합에 λ“€μ–΄ μžˆλŠ” μ›μ†Œλ“€μ„ κΊΌλ‚΄μ–΄ 숫자인 κ²½μš°μ—λŠ” answer에 μžˆλŠ” μ§€ 확인 ν›„ μ—†μœΌλ©΄ λ‹΄μ•„μ€€λ‹€.

βœ… λ‹€λ₯Έ μ‚¬λžŒ 풀이λ₯Ό 찾아보닀 λ³΄λ‹ˆ, μ •κ·œ ν‘œν˜„μ‹μ„ ν™œμš©ν•œ κ²½μš°κ°€ μžˆμ—ˆλ‹€. 파이썬의 re(regular expression) λͺ¨λ“ˆμ„ μ‚¬μš©, findall() λ©”μ„œλ“œλ₯Ό 톡해 λ¬Έμžμ—΄μ„ 검색할 수 μžˆλ‹€. 이 λ¬Έμ œμ—μ„œλŠ” iλ₯Ό λ°”λ‘œ re.findall("\d+", i)둜 ν‘œν˜„ν•΄ μˆ«μžκ°’λ“€λ§Œ μ°Ύμ•„μ„œ λ¦¬μŠ€νŠΈμ— 담아쀄 수 μžˆλ‹€.

 

🎫code )

def solution(s):
    answer = []
    a = s.split(',{')
    a.sort(key = len)
    tmp = ''    
    for i in a:
        for k in i:
            if k == ',':
                if int(tmp) not in answer:
                    answer.append(int(tmp))
                tmp = ''
            elif k !='{' and k != '}':
                tmp += k
        else:
            if int(tmp) not in answer:
                answer.append(int(tmp))
            tmp = ''
    return answer

 

πŸ“Œ description )

문제좜처 : https://programmers.co.kr/learn/courses/30/lessons/64065

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - νŠœν”Œ

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

 

[문제 μ„€λͺ…]

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

[μž…μΆœλ ₯ 예]

sresult
"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

μž…μΆœλ ₯ μ˜ˆμ— λŒ€ν•œ μ„€λͺ…μž…μΆœλ ₯ 예 #1

문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #3

(111, 20)을 μ§‘ν•© 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{111}, {111,20}}이 되며, μ΄λŠ” {{20,111},{111}}κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #4

(123)을 μ§‘ν•© 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{123}} μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #5

(3, 2, 4, 1)을 μ§‘ν•© 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, μ΄λŠ” {{4,2,3},{3},{2,3,4,1},{2,3}}κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•