[ํ๋ก๊ทธ๋๋จธ์ค] ๐ ํ์ผ๋ช ์ ๋ ฌ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / ํ์ด์ฌ / python / KAKAO BLIND RECRUITMENT
๐ ํ์ผ๋ช ์ ๋ ฌ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / KAKAO BLIND RECRUITMENT
๋ฌธ์ ์ค๋ช
ํ์ผ๋ช ์ ๋ ฌ
์ธ ์ฐจ๋ก์ ์ฝ๋ฉ ํ ์คํธ์ ๋ ์ฐจ๋ก์ ๋ฉด์ ์ด๋ผ๋ ๊ธฐ๋๊ธด ๋ธ๋ผ์ธ๋ ๊ณต์ฑ๋ฅผ ๋ฌด์ฌํ ํต๊ณผํด ์นด์นด์ค์ ์ ์ฌํ ๋ฌด์ง๋ ํ์ผ ์ ์ฅ์ ์๋ฒ ๊ด๋ฆฌ๋ฅผ ๋งก๊ฒ ๋์๋ค.
์ ์ฅ์ ์๋ฒ์๋ ํ๋ก๊ทธ๋จ์ ๊ณผ๊ฑฐ ๋ฒ์ ์ ๋ชจ๋ ๋ด๊ณ ์์ด, ์ด๋ฆ ์์ผ๋ก ์ ๋ ฌ๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด๊ธฐ๊ฐ ๋ถํธํ๋ค. ํ์ผ์ ์ด๋ฆ ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋์ค์ ๋ง๋ค์ด์ง 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์ ๊ทธ ๋๋จธ์ง ๋ถ๋ถ์ผ๋ก, ์ฌ๊ธฐ์๋ ์ซ์๊ฐ ๋ค์ ๋ํ๋ ์๋ ์์ผ๋ฉฐ, ์๋ฌด ๊ธ์๋ ์์ ์ ์๋ค.
ํ์ผ๋ช ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ํ, ๋ค์ ๊ธฐ์ค์ ๋ฐ๋ผ ํ์ผ๋ช ์ ์ ๋ ฌํ๋ค.
- ํ์ผ๋ช ์ ์ฐ์ 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๋ ํจ๊ป ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ ์๋ค.)
์ถ๋ ฅ ํ์
์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค.
๐ ๋์ ํ์ด
import re
import functools
headParser = re.compile('^([a-zA-Z]|-|\s)+')
numberParser = re.compile('(\d+)')
def compare(file1, file2):
lst1 = file1.split('.')
name1 = lst1[0]
head1Match = headParser.search(name1)
head1 = head1Match.group().lower()
number1Match = numberParser.search(name1)
number1 = number1Match.group()
tail1 = file1[number1Match.endpos:]
lst2 = file2.split('.')
name2 = lst2[0]
head2Match = headParser.search(name2)
head2 = head2Match.group().lower()
number2Match = numberParser.search(name2)
number2 = number2Match.group()
tail2 = file2[number2Match.endpos:]
print(head1, int(number1), head2, int(number2))
for i in range(min(len(head1), len(head2))):
if ord(head1[i])!=ord(head2[i]):
return ord(head1[i]) - ord(head2[i])
else:
if i != min(len(head1), len(head2))-1:
continue
elif i == min(len(head1), len(head2))-1:
if len(head1) != len(head2):
return len(head1) - len(head2)
else:
if int(number1)!=int(number2):
return int(number1)-int(number2)
else:
return 0
def solution(files):
return sorted(files, key=functools.cmp_to_key(compare))
์ ๊ทํํ์regular expression์ ์ด์ฉํ ์ ์ ํ ํ์ฑ๊ณผ ๊ฐ ๊ฐ์ ๋น๊ตํ๋ ์ปค์คํ ๋น๊ต ํจ์๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
headParse
์ ์ ๊ทํํ์์ '^([a-zA-Z]|-|\s)+'
๋ก ์ํ๋ฒณ ํน์ '-' ํน์ ๋น์นธ์ด ํ๋ ์ด์์ ํด๋นํ๋ ๋ถ๋ถ์ ์ฐพ๊ณ , numberParser
์ ์ ๊ทํํ์์ '\d+'
๋ก ํ๋ ์ด์์ ์ซ์๋ฅผ ์ฐพ๋ ์ ๊ทํํ์์ด๋ค.
headParser
์ numberParser
๋ฅผ ์ด์ฉํด ๊ฐ ํ์ผ๋ค์ head, number, tail๋ก ์ ์ ํ ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋จ๊ณ๋ณ๋ก ๋น๊ต์ฐ์ฐ์ ์งํํ๋ค.
- head ๋น๊ต
- number ๋น๊ต
๊ทธ๋ฆฌ๊ณ number
๊น์ง ๊ฐ๋ค๋ฉด 0์ ๋ฐํํ์ฌ ์์๋ฅผ ๊ทธ๋๋ก ๋๋๋ค.
sorted
์ ์ฌ์ฉ๋๋ compare
ํจ์๋ฅผ ์ ์ฉํ๊ธฐ์ํด ํ์ด์ฌ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ functools.cmp_to_key
๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ด ์ฝ๋์ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์๋ค.
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[ํ๋ก๊ทธ๋๋จธ์ค] ๐คณ ๋ฐฉ๊ธ ๊ทธ ๊ณก - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
[ํ๋ก๊ทธ๋๋จธ์ค] ๐คณ ๋ฐฉ๊ธ ๊ทธ ๊ณก - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
2019.02.04 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ ์๋์์ฑ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ ์๋์์ฑ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
2019.02.03 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐พ ์์ถ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / ํ์ด์ฌ
[ํ๋ก๊ทธ๋๋จธ์ค] ๐พ ์์ถ - [3์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / ํ์ด์ฌ
2019.02.02 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ ์ถ์ ํธ๋ํฝ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / ํ์ด์ฌ / python / KAKAO BLIND RECRUITMENT
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ ์ถ์ ํธ๋ํฝ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / ํ์ด์ฌ / python / KAKAO BLIND RECRUITMENT
2019.02.01