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. 6. 19:02
728x90

1. ๋ฌธ์ œ ์„ค๋ช…

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

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

๋ฒ„์ „ ๋ฒˆํ˜ธ ์™ธ์—๋„ ์ˆซ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ๋ชฉ๋ก์€ ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋ถˆํŽธํ–ˆ๋‹ค. ์˜ˆ์ปจ๋Œ€ ํŒŒ์ผ ๋ชฉ๋ก์ด ["img12.png", "img10.png", "img2.png", "img1.png"]์ผ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ ์ •๋ ฌ์€ ["img1.png", "img10.png", "img12.png", "img2.png"] ์ˆœ์ด ๋˜์ง€๋งŒ, ์ˆซ์ž ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ["img1.png", "img2.png", "img10.png", img12.png"] ์ˆœ์ด ํ›จ์”ฌ ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.

๋ฌด์ง€๋Š” ๋‹จ์ˆœํ•œ ๋ฌธ์ž ์ฝ”๋“œ ์ˆœ์ด ์•„๋‹Œ, ํŒŒ์ผ๋ช…์— ํฌํ•จ๋œ ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ํ•œ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ €์žฅ์†Œ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์— ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์†Œ์Šค ํŒŒ์ผ ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ํŒŒ์ผ๋ช…์€ 100 ๊ธ€์ž ์ด๋‚ด๋กœ, ์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ(" "), ๋งˆ์นจํ‘œ("."), ๋นผ๊ธฐ ๋ถ€ํ˜ธ("-")๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ํŒŒ์ผ๋ช…์€ ์˜๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

ํŒŒ์ผ๋ช…์€ ํฌ๊ฒŒ HEAD, NUMBER, TAIL์˜ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • HEAD๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ตœ์†Œํ•œ ํ•œ ๊ธ€์ž ์ด์ƒ์ด๋‹ค.
  • NUMBER๋Š” ํ•œ ๊ธ€์ž์—์„œ ์ตœ๋Œ€ ๋‹ค์„ฏ ๊ธ€์ž ์‚ฌ์ด์˜ ์—ฐ์†๋œ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์•ž์ชฝ์— 0์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 0๋ถ€ํ„ฐ 99999 ์‚ฌ์ด์˜ ์ˆซ์ž๋กœ, 00000์ด๋‚˜ 0101 ๋“ฑ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • TAIL์€ ๊ทธ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ, ์—ฌ๊ธฐ์—๋Š” ์ˆซ์ž๊ฐ€ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์•„๋ฌด ๊ธ€์ž๋„ ์—†์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

์ž…๋ ฅ ํ˜•์‹

์ž…๋ ฅ์œผ๋กœ ๋ฐฐ์—ด files๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

  • files๋Š” 1000 ๊ฐœ ์ดํ•˜์˜ ํŒŒ์ผ๋ช…์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด๋‹ค.
  • ๊ฐ ํŒŒ์ผ๋ช…์€ 100 ๊ธ€์ž ์ดํ•˜ ๊ธธ์ด๋กœ, ์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ(" "), ๋งˆ์นจํ‘œ("."), ๋นผ๊ธฐ ๋ถ€ํ˜ธ("-")๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ํŒŒ์ผ๋ช…์€ ์˜๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ˆซ์ž๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ค‘๋ณต๋œ ํŒŒ์ผ๋ช…์€ ์—†์œผ๋‚˜, ๋Œ€์†Œ๋ฌธ์ž๋‚˜ ์ˆซ์ž ์•ž๋ถ€๋ถ„์˜ 0 ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ํ•จ๊ป˜ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. (muzi1.txt, MUZI1.txt, muzi001.txt, muzi1.TXT๋Š” ํ•จ๊ป˜ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.)

์ถœ๋ ฅ ํ˜•์‹

์œ„ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

2. ๋‚ด ํ’€์ด

- ์ •ํ™•๋„ : 55%

import re
def solution(files):
    answer = []
    
    for i in files:
        number = re.findall('\d+', i)[0]
        head, tail = re.split('\d+', i)
        answer.append([head, number, tail])
        
    answer.sort(key=lambda x:(x[0].lower(),int(x[1])))
    answer = [''.join(x) for x in answer]
    return answer

 

tail์— ์ˆซ์ž๊ฐ€ ์กด์žฌํ• ์ˆ˜ ์žˆ์Œ

 

import re
def solution(files):
    answer = []
    
    for i in files:
        number = re.findall('\d+', i)
        word = re.split('\d+', i)
        
        if len(word) <=1:
            answer.append([word[0], number[0]])
        elif len(number)>=2:
            answer.append([word[0], number[0],i.replace(word[0],'',1).replace(number[0],'',1)])
        else:
            answer.append([word[0], number[0], word[1]])
        
    answer.sort(key=lambda x:(x[0].lower(),int(x[1])))
    answer = [''.join(x) for x in answer]
    return answer

 

1.  re.findall()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ์ˆซ์ž ์ถ”์ถœ

2. ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ split() ํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜

3. tail์ด ์—†๋Š” ๊ฒฝ์šฐ (len(word)<=1) : word[0]์™€ number[0] answer์— ์ถ”๊ฐ€

tail์— ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ (len(number)>=2): ๋ฌธ์ž์—ด์—์„œ word[0]์™€ number[0]๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ถ”๊ฐ€

4. ๋Œ€, ์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ split๋œ ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ head๋ถ€๋ถ„์€ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜, number๋ถ€๋ถ„์€ ์ •์ˆ˜ ๋ณ€ํ™˜ ํ›„ ์ •๋ ฌ

5. ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ join()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ์นœ ํ›„ ๋ฐ˜ํ™˜

 

 

3. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

import re

def solution(files):
    a = sorted(files, key=lambda file : int(re.findall('\d+', file)[0]))
    b = sorted(a, key=lambda file : re.split('\d+', file.lower())[0])
    return b

1. ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž ์ถ”์ถœ ํ›„ ์ •๋ ฌ

2. ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด ๋ถ„ํ•  ํ›„ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ •๋ ฌ

728x90
Comments