๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2018 KAKAO BLIND RECRUITMENT '[3์ฐจ] ํŒŒ์ผ๋ช… ์ •๋ ฌ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 3. 1.
728x90
๋ฐ˜์‘ํ˜•
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

"""
์„ธ ์ฐจ๋ก€์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์™€ ๋‘ ์ฐจ๋ก€์˜ ๋ฉด์ ‘์ด๋ผ๋Š” 
๊ธฐ๋‚˜๊ธด๋ธ”๋ผ์ธ๋“œ ๊ณต์ฑ„๋ฅผ ๋ฌด์‚ฌํžˆ ํ†ต๊ณผํ•ด ์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š”
ํŒŒ์ผ ์ €์žฅ์†Œ ์„œ๋ฒ„ ๊ด€๋ฆฌ๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.

์ €์žฅ์†Œ ์„œ๋ฒ„์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ณผ๊ฑฐ ๋ฒ„์ „์„ ๋ชจ๋‘ ๋‹ด๊ณ  ์žˆ์–ด, 
์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ํŒŒ์ผ ๋ชฉ๋ก์€ ๋ณด๊ธฐ๊ฐ€ ๋ถˆํŽธํ–ˆ๋‹ค. 
ํŒŒ์ผ์„ ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋‚˜์ค‘์— ๋งŒ๋“ค์–ด์ง„ 
ver-10.zip์ด ver-9.zip๋ณด๋‹ค ๋จผ์ € ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(์ค‘๋žต)

ํŒŒ์ผ๋ช…์€ ์šฐ์„  HEAD ๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. 
์ด๋•Œ, ๋ฌธ์ž์—ด ๋น„๊ต ์‹œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. 
MUZI์™€ muzi, MuZi๋Š” ์ •๋ ฌ ์‹œ์— ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

ํŒŒ์ผ๋ช…์˜ HEAD ๋ถ€๋ถ„์ด ๋Œ€์†Œ๋ฌธ์ž ์ฐจ์ด ์™ธ์—๋Š” ๊ฐ™์„ ๊ฒฝ์šฐ,
NUMBER์˜ ์ˆซ์ž ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. 9 < 10 < 0011 < 012 < 13 < 014 ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.
์ˆซ์ž ์•ž์˜ 0์€ ๋ฌด์‹œ๋˜๋ฉฐ, 012์™€ 12๋Š” ์ •๋ ฌ ์‹œ์— ๊ฐ™์€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

๋‘ ํŒŒ์ผ์˜ HEAD ๋ถ€๋ถ„๊ณผ, NUMBER์˜ ์ˆซ์ž๋„ ๊ฐ™์„ ๊ฒฝ์šฐ, ์›๋ž˜ ์ž…๋ ฅ์— ์ฃผ์–ด์ง„ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
MUZI01.zip๊ณผ muzi1.png๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด, ์ •๋ ฌ ํ›„์—๋„ ์ž…๋ ฅ ์‹œ 
์ฃผ์–ด์ง„ ๋‘ ํŒŒ์ผ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

(ํ•˜๋žต)
"""

def solution(files):
    decom = []
    for index, file in enumerate(files):
        file = file.lower()
        decom.append([index,'',''])
        number_section = False
        for w in file:
            if w.isdigit():
                number_section = True
                decom[-1][2] += w
            else:
                if number_section:
                    break
                decom[-1][1] += w
        decom[-1][2] = int(decom[-1][2])
    
    decom = sorted(decom, key=lambda x: (x[1],x[2],x[0]))
    return [files[v[0]] for v in decom]

"""
๊ธฐ์ค€์ด ์„ธ์„ธํ•˜์—ฌ ๊ทธ๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค. decomposition(๋ถ„ํ•ด)์˜ ์•ฝ์ž์ธ decom์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
๋ถ„ํ•ดํ•  ๋ฌธ์žฅ์˜ ์ธ๋ฑ์Šค, head์™€ number์„ ๋‹ด์„ '','' -> [index,'','']๋กœ ์›์†Œ๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.

- 31 line
head๋Š” ๋Œ€์†Œ๋ฌธ์ž๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „๋ถ€ ์†Œ๋ฌธ์ž ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

- 34~42 line
file์—์„œ ํ•œ๊ธ€์ž์”ฉ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด์„œ head์—๋Š” ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ , 
number์—๋งŒ ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ๋•Œ๋ฌธ์— ์ˆซ์ž๋ผ๋ฉด number_section์— ๋“ค์–ด์™”๋‹ค๊ณ  ํ–ˆ๋‹ค.
ex) file -> f-50.txt ์ด๋ผ๋ฉด 
    ์ฒ˜์Œ์— f-๊นŒ์ง€๋Š” else๋ฌธ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ head๋ถ€๋ถ„์— ๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  5์—์„œ number_section=True๊ฐ€ ๋˜๋ฉด์„œ number๋ถ€๋ถ„์— ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
    ๋‹ค์‹œ .์—์„œ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๊ณ  number_section์€ true๊ธฐ ๋•Œ๋ฌธ์— for๋ฌธ์ด ๋๋‚œ๋‹ค.
    tail์€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ถ„ํ•ดํ•˜์ง€ ์•Š์•˜๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์— 0012, 12๊ฐ€ ๊ฐ™๋‹ค๊ณ  ๋ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— int๋กœ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๋‹ค.

- 44 line
decom์„ ์†ŒํŠธํ• ๋•Œ head๋ฅผ ์‚ฌ์ „์ˆœ์„œ, ๊ทธ๋‹ค์Œ์€ number์ˆœ์„œ, ๋งˆ์ง€๋ง‰์€ index์ˆœ์„œ์ด๋‹ค.
sorted(list, key=lambda x: (x[1],x[2],x[0]))์€ ๊ทธ๋ ‡๊ฒŒ ์†ŒํŠธํ•˜๋ผ๋Š” ์†Œ๋ฆฌ์ด๋‹ค.
key๋ถ€๋ถ„์€ sort๋ฅผ ํ• ๋•Œ ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œํ•˜๋‚˜๋ฅผ x๋ผ๊ณ  ์น˜ํ™˜ํ•œ๋‹ค. 
๋‚˜๋Š” ์›์†Œ๊ฐ€ [index,head,number] ์ด๊ธฐ ๋•Œ๋ฌธ์— x[1]์€ head, x[2]๋Š” number๊ฐ€ ๋œ๋‹ค.

- 45 line
๋งˆ์ง€๋ง‰์œผ๋กœ decom์—์„œ ์†ŒํŠธ๋˜์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ index๋ถ€๋ถ„์„ ๊ฐ€์ง€๊ณ ์™€์„œ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€