๋ชฉ์ฐจ
- 1. ๋ฌธ์ ์ค๋ช
- 2. ์ ํ์ฌํญ
- 3. ํ์ด์ฌ ํ์ด
- 4. ํ์ด์ฌ ํ์ด ์ค๋ช
- 5. ์ํ์ฐฉ์ค
- 6. ๋๋์
1. ๋ฌธ์ ์ค๋ช
๋ค์ค๋ 7๋จ๊ณ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ์ ๊ท ์ ์ ์ ์์ด๋๋ฅผ ๊ฒ์ฌํ๊ฒ ๋ฉ๋๋ค. ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ฐ๋ผ ๊ฐ ๋จ๊ณ๋ง๋ค ์ผ์ ๊ท์น์ ์ํํ๋ฉฐ id ๋ฅผ ํด๋น ๊ท์น์ ๋ง๊ฒ ๋ณ๊ฒฝ์ํต๋๋ค.
2. ์ ํ์ฌํญ
- 1๋จ๊ณ new_id์ ๋ชจ๋ ๋๋ฌธ์๋ฅผ ๋์๋๋ ์๋ฌธ์๋ก ์นํํฉ๋๋ค.
- 2๋จ๊ณ new_id์์ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.)๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- 3๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ์ฐ์๋ ๋ถ๋ถ์ ํ๋์ ๋ง์นจํ(.)๋ก ์นํํฉ๋๋ค.
- 4๋จ๊ณ new_id์์ ๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
- 5๋จ๊ณ new_id๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด, new_id์ "a"๋ฅผ ๋์ ํฉ๋๋ค.
- 6๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด, new_id์ ์ฒซ 15๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค.
- ๋ง์ฝ ์ ๊ฑฐ ํ ๋ง์นจํ(.)๊ฐ new_id์ ๋์ ์์นํ๋ค๋ฉด ๋์ ์์นํ ๋ง์นจํ(.) ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- 7๋จ๊ณ new_id์ ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, new_id์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ new_id์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์ ๋๋ค.
- ์)
1๋จ๊ณ ๋๋ฌธ์ 'B'์ 'T'๊ฐ ์๋ฌธ์ 'b'์ 't'๋ก ๋ฐ๋์์ต๋๋ค.
"...!@BaT#*..y.abcdefghijklm" → "...!@bat#*..y.abcdefghijklm"
2๋จ๊ณ '!', '@', '#', '*' ๋ฌธ์๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
"...!@bat#*..y.abcdefghijklm" → "...bat..y.abcdefghijklm"
3๋จ๊ณ '...'์ '..' ๊ฐ '.'๋ก ๋ฐ๋์์ต๋๋ค.
"...bat..y.abcdefghijklm" → ".bat.y.abcdefghijklm"
4๋จ๊ณ ์์ด๋์ ์ฒ์์ ์์นํ '.'๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
".bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
5๋จ๊ณ ์์ด๋๊ฐ ๋น ๋ฌธ์์ด์ด ์๋๋ฏ๋ก ๋ณํ๊ฐ ์์ต๋๋ค.
"bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
6๋จ๊ณ ์์ด๋์ ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฏ๋ก, ์ฒ์ 15์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฌธ์๋ค์ด ์ ๊ฑฐ๋์์ต๋๋ค.
"bat.y.abcdefghijklm" → "bat.y.abcdefghi"
7๋จ๊ณ ์์ด๋์ ๊ธธ์ด๊ฐ 2์ ์ดํ๊ฐ ์๋๋ฏ๋ก ๋ณํ๊ฐ ์์ต๋๋ค.
"bat.y.abcdefghi" → "bat.y.abcdefghi"
3. ํ์ด์ฌ ํ์ด
import re
def proc_1(x):
return x.lower()
def proc_2(x):
return re.sub('[^a-z0-9\-\_\.]','',x)
def proc_3(x):
return re.sub('\.\.+','.',x) # ๊ดํธ ์์ ๊ธฐ
def proc_4(x):
return re.sub('^\.|\.$','',x) # ์ ๋ ๋ง์นจํ ์ ๊ฑฐ
def proc_5(x):
if x == '':
x = 'a' # ๋น ๋ฌธ์์ด์ด๋ฉด a ๋์
return x
# ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ฉด 1~15์๋ง ๋จ๊ธฐ๊ธฐ & ๋งจ ๋ ๋ง์นจํ ์ ๊ฑฐ
def proc_6(x):
return re.sub('\.$','',x[0:15])
# ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, ๋ง์ง๋ง ๋ฌธ์๋ฅผ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์ด๊ธฐ
def proc_7(x):
if len(x) < 3:
x = x + x[-1] * (3-len(x))
return x
def solution(new_id):
answer = ''
# 1๋จ๊ณ
answer = proc_1(new_id)
# 2๋จ๊ณ
answer = proc_2(answer)
# 3๋จ๊ณ
answer = proc_3(answer)
# 4๋จ๊ณ
answer = proc_4(answer)
# 5๋จ๊ณ
answer = proc_5(answer)
# 6๋จ๊ณ
answer = proc_6(answer)
# 7๋จ๊ณ
answer = proc_7(answer)
return answer
ํ์ด์ฌ ํ์ด ๊ฒฐ๊ณผ
ํ
์คํธ 1 ใ ํต๊ณผ (0.27ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.22ms, 10.4MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.22ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.25ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.21ms, 10.3MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.21ms, 10.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.21ms, 10.3MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 11 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 12 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 13 ใ ํต๊ณผ (0.21ms, 10.3MB)
ํ
์คํธ 14 ใ ํต๊ณผ (0.24ms, 10.3MB)
ํ
์คํธ 15 ใ ํต๊ณผ (0.22ms, 10.4MB)
ํ
์คํธ 16 ใ ํต๊ณผ (0.22ms, 10.3MB)
ํ
์คํธ 17 ใ ํต๊ณผ (0.28ms, 10.3MB)
ํ
์คํธ 18 ใ ํต๊ณผ (0.28ms, 10.4MB)
ํ
์คํธ 19 ใ ํต๊ณผ (0.30ms, 10.2MB)
ํ
์คํธ 20 ใ ํต๊ณผ (0.31ms, 10.3MB)
ํ
์คํธ 21 ใ ํต๊ณผ (0.31ms, 10.3MB)
ํ
์คํธ 22 ใ ํต๊ณผ (0.33ms, 10.3MB)
ํ
์คํธ 23 ใ ํต๊ณผ (0.21ms, 10.2MB)
ํ
์คํธ 24 ใ ํต๊ณผ (0.31ms, 10.3MB)
ํ
์คํธ 25 ใ ํต๊ณผ (0.23ms, 10.3MB)
ํ
์คํธ 26 ใ ํต๊ณผ (0.23ms, 10.3MB)
์ฑ์ ๊ฒฐ๊ณผ
์ ํ์ฑ: 100.0
ํฉ๊ณ: 100.0 / 100.0
4. ํ์ด์ฌ ํ์ด ์ค๋ช
์ ๋ฌธ์ ์ ์ฃผ์ ํน์ง์ ์ ๊ท์ ํ์ฉ ์ ๋๋ค. ์ ๊ท ํํ์์ด๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
regular expression, regexp , regex ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
๊ฐ ๋จ๊ณ๋ณ procedure 1~7์ proc_1 ๋ถํฐ proc_7 ์ด๋ผ๋ ํจ์๋ช ์ ์ด์ฉํด ๋ํ๋ด์์ต๋๋ค.
1๋จ๊ณ
new_id ์ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ ๋ ฅ๊ฐ์ ๋ฐ์, proc_1 ์ lower์ ํตํด ์ํ๋ฒณ์์ ๋๋ฌธ์๋ค์ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ค๋๋ค.
2๋จ๊ณ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ, ๋ฐ์ค, ๋ง์นจํ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค
- \ ์ ์ด์ค์ผ์ดํ์ ๋๋ค.
- ์ ๊ท์์์๋ ์ผ๋ถ ๋ฉํ๋ฌธ์๊ฐ ์๋๋ฐ(. - _ : ๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์๋ฏธํจ) , ์ด๋ฅผ ํ ์คํธ ์์ฒด๋ก ํํํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ด์ค์ผ์ดํ(escape) ๋ฌธ์๋ผ๊ณ ํฉ๋๋ค.
- ๋ฐฑ์ฌ๋ฌ์ ๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
3๋จ๊ณ
๋ง์นจํ(.)๊ฐ 2๋ฒ ์ด์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋ ๋ถ๋ถ์ ๋ํด์ 1๊ฐ์ ๋ง์นจํ๋ก ์นํ(sub) ํด์ค๋๋ค.
4๋จ๊ณ
๋ง์นจํ(.)๊ฐ ์ฒ์์ด๋ ๋์ ์์นํ๋ค๋ฉด ์ ๊ฑฐํฉ๋๋ค.
๋ฌธ์์ด์ ์์ | ๋ฌธ์์ด์ ๋ |
^๋ฌธ์์ด | ๋ฌธ์์ด$ |
์์ ๋ฐฉ์์ ์ํ๋ฉด, ๋ฌธ์ฅ์ด ์ฃผ์ด์ง๋ ^๋ฌธ์์ด์ด๋ฉด, ์ฒ์์ ์์ํ ๋ '๋ฌธ์์ด' ๋ก ์์ํ๋ ๊ฒ์ด ์์ผ๋ฉด ํด๋น ๊ฐ์ ๋งค์นญํด์ค๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก $๋ ๊ฐ์ต๋๋ค.
5๋จ๊ณ
๋น๋ฌธ์์ด์ a๋ก ์นํํด์ค๋๋ค.
6๋จ๊ณ
๊ธธ์ด๋ฅผ 16์ ์ด์์ผ๋ ์ฒ์๋ถํฐ 15๋ฒ์งธ ๊น์ง์ ๋ฌธ์๋ก ๋จ๊ธฐ๋ฉฐ, ์ ๊ฑฐ๋ฅผ ์ํํ ํ์ ๋ง์ง๋ง์ ๋ง์นจํ(.)๊ฐ ๋ฌธ์์ด์ ๋์ ์์นํ๋ค๋ฉด, ๋ง์นจํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
7๋จ๊ณ
new_id์ ๊ธธ์ด๊ฐ 3์ ์ดํ๋ผ๋ฉด, ๋ง์ง๋ง์ ๋ฌธ์๋ฅผ 3์๊ฐ ๋๊ธฐ ์ํด ํ์ํ ๊ธธ์ด๋งํผ ๋๋ ค์ค๋๋ค.
5. ์ํ์ฐฉ์ค
return re.sub('\.\.+','.',x)
dot(.) ์ด 2๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๋ฅผ '[.]' ์ด๋ฐ์์ผ๋ก ํํํ์ง ์๊ณ \.\. ์ด๋ ๊ฒ ๋๊ณ +(1๋ฒ์ด์ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ) ์ ๊ฐ์ ํํ์ ํตํด ์ ๊ท์์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ตํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋งจ ์, ๋งจ ๋ค์ ์ค๋ ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ ^\. (๋งจ์), \.$ (๋งจ๋ค) ์ ๊ฐ์ด ^ ๊ณผ $ ์ ํํํ์ฌ ๋งจ์๊ณผ ๋งจ ๋ค์ ์ค๋ ๋ฌธ์์ ๋ํด์ ํน์ ํ๋ ๊ฒ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค.
6. ๋๋์
์ ๊ท ํํ์์ ํ์ฉํ๋ฉฐ, ์ ์ฉ๋ฐฉ๋ฒ์ ๋ํด ์ตํ ์ ์์์ต๋๋ค.