๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [3์ฐจ] ํŒŒ์ผ๋ช… ์ •๋ฆฌ

๐ŸŽฎinspirer9 2023. 2. 23. 08:28
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

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

์ €์žฅ์†Œ ์„œ๋ฒ„์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ณผ๊ฑฐ ๋ฒ„์ „์„ ๋ชจ๋‘ ๋‹ด๊ณ  ์žˆ์–ด, ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ํŒŒ์ผ ๋ชฉ๋ก์€ ๋ณด๊ธฐ๊ฐ€ ๋ถˆํŽธํ–ˆ๋‹ค. ํŒŒ์ผ์„ ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋‚˜์ค‘์— ๋งŒ๋“ค์–ด์ง„ 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์€ ๊ทธ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ, ์—ฌ๊ธฐ์—๋Š” ์ˆซ์ž๊ฐ€ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์•„๋ฌด ๊ธ€์ž๋„ ์—†์„ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ๋ช…HEADNUMBERTAIL

foo9.txt foo 9 .txt
foo010bar020.zip foo 010 bar020.zip
F-15 F- 15 (๋นˆ ๋ฌธ์ž์—ด)

ํŒŒ์ผ๋ช…์„ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ ํ›„, ๋‹ค์Œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ํŒŒ์ผ๋ช…์„ ์ •๋ ฌํ•œ๋‹ค.

  • ํŒŒ์ผ๋ช…์€ ์šฐ์„  HEAD ๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ์ด๋•Œ, ๋ฌธ์ž์—ด ๋น„๊ต ์‹œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. MUZI์™€ muzi, MuZi๋Š” ์ •๋ ฌ ์‹œ์— ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.
  • ํŒŒ์ผ๋ช…์˜ HEAD ๋ถ€๋ถ„์ด ๋Œ€์†Œ๋ฌธ์ž ์ฐจ์ด ์™ธ์—๋Š” ๊ฐ™์„ ๊ฒฝ์šฐ, NUMBER์˜ ์ˆซ์ž ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. 9 < 10 < 0011 < 012 < 13 < 014 ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์ˆซ์ž ์•ž์˜ 0์€ ๋ฌด์‹œ๋˜๋ฉฐ, 012์™€ 12๋Š” ์ •๋ ฌ ์‹œ์— ๊ฐ™์€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ๋‘ ํŒŒ์ผ์˜ HEAD ๋ถ€๋ถ„๊ณผ, NUMBER์˜ ์ˆซ์ž๋„ ๊ฐ™์„ ๊ฒฝ์šฐ, ์›๋ž˜ ์ž…๋ ฅ์— ์ฃผ์–ด์ง„ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. MUZI01.zip๊ณผ muzi1.png๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด, ์ •๋ ฌ ํ›„์—๋„ ์ž…๋ ฅ ์‹œ ์ฃผ์–ด์ง„ ๋‘ ํŒŒ์ผ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๋ฌด์ง€๋ฅผ ๋„์™€ ํŒŒ์ผ๋ช… ์ •๋ ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๋ผ.

์ œํ•œ ์‚ฌํ•ญ

์ž…๋ ฅ ํ˜•์‹

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

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

์ถœ๋ ฅ ํ˜•์‹

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

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ: ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
์ถœ๋ ฅ: ["img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"]

์ž…๋ ฅ: ["F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat"]
์ถœ๋ ฅ: ["A-10 Thunderbolt II", "B-50 Superfortress", "F-5 Freedom Fighter", "F-14 Tomcat"]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

ํ•ด์„ค ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

ํ’€์ด

  • ์–ด์ œ ์•ˆ ํ’€๋ ค์„œ ํ’€๋‹ค ์ž๋ฒ„๋ ธ๋Š”๋ฐ...
  • ๊ณ ์นœ ๋ถ€๋ถ„ split_head_num_tail์„ for๋ฌธ์œผ๋กœ ์งฏ๋‹ค๊ฐ€ while๋กœ ์ˆ˜์ •ํ•˜๊ณ  ๊ณ„์† ์ง€์ง€๊ณ  ๋ณต๊ณ  ํ–ˆ์Œ ใ…ก.ใ…ก;
def split_head_num_tail(string):
    n, t = 0, 0
    while n < len(string):
        if string[n].isdigit():
            break
        n += 1
    t = n + 1
    while t < len(string):
        if string[t].isdigit() == False:
            break
        t += 1
    return (string[:n], string[n:t], string[t:])

def solution(files):
    answer = []
    sorted_files = []
    for file in files:
        sorted_files.append(split_head_num_tail(file))
    sorted_files.sort(key=lambda x:(x[0].lower(),int(x[1])))
    answer = [''.join(i) for i in sorted_files]
    return answer
  • ํœด ๋‹คํ–‰
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.04ms, 10.4MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.03ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (2.56ms, 10.7MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (2.62ms, 10.7MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (2.54ms, 10.7MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (2.45ms, 10.7MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (2.56ms, 10.7MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (2.28ms, 10.5MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (2.32ms, 10.7MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (2.28ms, 10.6MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (2.45ms, 10.5MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (2.41ms, 10.8MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (2.10ms, 10.6MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (2.53ms, 10.9MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (2.53ms, 10.8MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (2.27ms, 10.7MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (1.89ms, 10.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (2.08ms, 10.7MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (2.35ms, 10.7MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (2.48ms, 10.7MB)
  • ๊ณ ์ˆ˜์˜ ํ’€์ด
    • ...............
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 ใ€‰	ํ†ต๊ณผ (0.10ms, 10.3MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.09ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (2.65ms, 10.5MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (2.67ms, 10.4MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (2.62ms, 10.4MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (2.51ms, 10.5MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (2.48ms, 10.5MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (2.26ms, 10.4MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (2.30ms, 10.5MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (2.46ms, 10.4MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (2.39ms, 10.4MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (2.57ms, 10.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (2.49ms, 10.6MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (3.47ms, 10.5MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (3.50ms, 10.6MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (2.34ms, 10.4MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (2.25ms, 10.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (4.02ms, 10.5MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (2.64ms, 10.5MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (2.58ms, 10.5MB)
  •  ใ…ก.ใ…ก
import re

def solution(files):

    def key_function(fn):
        head,number,tail = re.match(r'([a-z-. ]+)(\d{,5})(.*)',fn).groups()
        return [head,int(number)]

    return sorted(files, key = lambda x: key_function(x.lower()))
    
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.16ms, 10.4MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.18ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (1.91ms, 10.6MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (1.99ms, 10.4MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (1.92ms, 10.5MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (1.89ms, 10.4MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (1.90ms, 10.5MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (1.89ms, 10.4MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (1.77ms, 10.6MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (1.86ms, 10.5MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (1.87ms, 10.4MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (1.86ms, 10.5MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (1.53ms, 10.4MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (1.53ms, 10.8MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (1.56ms, 10.6MB)
ํ…Œ์ŠคํŠธ 16 ใ€‰	ํ†ต๊ณผ (1.90ms, 10.4MB)
ํ…Œ์ŠคํŠธ 17 ใ€‰	ํ†ต๊ณผ (1.52ms, 10.4MB)
ํ…Œ์ŠคํŠธ 18 ใ€‰	ํ†ต๊ณผ (1.63ms, 10.4MB)
ํ…Œ์ŠคํŠธ 19 ใ€‰	ํ†ต๊ณผ (1.75ms, 10.5MB)
ํ…Œ์ŠคํŠธ 20 ใ€‰	ํ†ต๊ณผ (1.84ms, 10.5MB)

์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค๊ณ  ํ•œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•