# 2021 KAKAO BLIND RECRUITMENT #72410๋ฒ # lv1
# ๋ฌธ์
์นด์นด์ค์ ์
์ฌํ ์ ์
๊ฐ๋ฐ์ ๋ค์ค๋ "์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ"์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์
ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์
๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. "๋ค์ค"์๊ฒ ์ฃผ์ด์ง ์ฒซ ์
๋ฌด๋ ์๋ก ๊ฐ์
ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์
๋ ฅํ์ ๋, ์
๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์
๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์
๋๋ค.
- ์์ด๋์ ๊ธธ์ด๋ 3์ ์ด์ 15์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋จ, ๋ง์นจํ(.)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
"๋ค์ค"๋ ๋ค์๊ณผ ๊ฐ์ด 7๋จ๊ณ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๊ฐ ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง๋ ์ง ๊ฒ์ฌํ๊ณ ๊ท์น์ ๋ง์ง ์์ ๊ฒฝ์ฐ ๊ท์น์ ๋ง๋ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํด ์ฃผ๋ ค๊ณ ํฉ๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๊ฐ new_id ๋ผ๊ณ ํ๋ค๋ฉด,
# 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์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์
๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๋ฅผ ๋ํ๋ด๋ new_id๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, "๋ค์ค"๊ฐ ์ค๊ณํ 7๋จ๊ณ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น ํ์ ์ถ์ฒ ์์ด๋๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
# ํ์ด
๋ด ํ์ด
def solution(new_id):
new_id = new_id.lower()
answer = ''
for word in new_id: # ํด๋น ์กฐ๊ฑด์ ๋ง๊ฒ or ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์กฐ๊ฑด๋ฌธ์ ๋ฌ์๋ค.
if word == '-' or word == '_' or word == '.' or word.isdigit() or word.isalpha():
answer += word
else:
pass
while '..' in answer: # '..'์ด answer์ ์์ ๋๊น์ง
answer = answer.replace('..', '.')
while answer.startswith('.') or answer.endswith('.'):
# while๋ฌธ ๋ด๋ถ๋ก ๋ฃ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ startswith('.')์ endswith('.')ํ๋ฉด ํด๋น ๋ฌธ์๋ ๋นผ๊ณ ๋ค์
# answer ๋ฌธ์์ด์ ํ ๋นํ๋ค.
if answer.startswith('.'):
answer = answer[1:]
elif answer.endswith('.'):
answer = answer[:-1]
if len(answer) == 0: # answer์ ๊ธธ์ด๊ฐ 0์ด๋ฉด 'a'๋ฅผ ์ถ๊ฐ
answer += 'a'
if len(answer) >= 16: # answer์ ๊ธธ์ด๊ฐ 16์ด์์ด๋ฉด 15๊ฐ์ ์์ ๋ฌธ์์ด๋ง ๋จ๊ธฐ๊ธฐ.
answer = answer[:15]
# ๊ณ์ ์๋๋๋๋ง.. ์๊ณ ๋ณด๋ ์ธ๋ฑ์ค ์ค์ ์ ์๋ชปํด์ ๊ณ์ ๋ชป ํ๊ณ ์๋ค๊ฐ ๊ฒจ์ฐ ๋ฐ๊ฒฌํ๊ณ ๊ณ ์ณค๋ค...
if answer.endswith('.'):
answer = answer[:-1] #
while len(answer) < 3: # ์ญ์ ๋ง์ฐฌ๊ฐ์ง. answer์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
answer += answer[-1]
return answer
๋จ์ ํ์ด(๋ธ๋ก๊ทธ ์ฐธ๊ณ )
import re
def solution(new_id):
answer = ''
answer = re.sub('[^a-z\d\_\-\.]','',new_id.lower())
# ์ ๊ทํํ์ : a~z๊น์ง, _, -, .๋ง์ answer์ ๋ด๋๋ค. + ๋ด๊ธด answer์ ๋ฌธ์๋ ์๋ฌธ์๋ก ์นํํ๋ค.
answer = re.sub('\.\.+', '.', answer)
# .. ์ด ๋ฐ๋ณต๋๋ฉด .๋ก ๋ฐ๊พธ๋ผ๋ ์๋ฏธ..? ์ฌ์ค ์ด ๋ค์ ์ฝ๋๋ถํฐ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
answer = re.sub('^\.', '', answer)
if answer == '':
answer = 'a'
answer = re.sub('\.$','', answer[:15])
if len(answer) < 3:
return answer.ljust(3, answer[-1])
return answer
# little_potato.log ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋๋ฐ, ์ ๊ทํํ์์ ๋ํ ์ดํด๊ฐ ์ข ๋ ์์ด์ผ ํ ๋ฏํ๋ค.
์ ๊ทํํ์์ ์ฌ์ฉํ ์ฝ๋๋ค.
์ ๊ทํํ์ (Regular expressions) ์ ํน์ ํ ๊ท์น์ ๊ฐ์ง ๋ฌธ์์ด์ ์งํฉ์ ํํํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ์ ์ธ์ด์ด๋ค. ๋ณต์กํ ๋ฌธ์์ด์ ๊ฒ์๊ณผ ์นํ์ ์ํด ์ฌ์ฉ๋๋ฉฐ, Python ๋ฟ๋ง ์๋๋ผ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ค. ์.. ์์ง ์ํธ๋ฅผ ๋ณด๋ ๋ฏํ ๋ํดํจ๊ณผ ์ด๋ ค์์ด ์๊ธด ํ๋ฐ,(ใ ใ ใ ) ์ ๊ทํํ์์ ์ข ๋ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ฌ์ฉํด์ผ ํ ๋ฏํ๋ค. ์ฝ๋ ์์ฒด๊ฐ ๊ต์ฅํ ๊ฐ๊ฒฐํด์ง๊ณ ํจ์จ์ฑ๋ ๋์ ์ ์ฉํ ๋๊ตฌ์ด๋, ์ถํ ๊ฐ๋ ์ ๋ถ๋ถ์ ๋ค์ ์ ๋ฆฌํด์ ์ฌ๋ ค๋ณด๊ฒ ๋ค.
์ถ์ฒ: https://velog.io/@nellroll/%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C
์ ๊ท ์์ด๋ ์ถ์ฒ
ํ๋ก๊ทธ๋๋จธ์ค lv1 ์ ๊ท ์์ด๋ ์ถ๋ ฅ ํ์ด์ฌ
velog.io
'Python > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
# 2021 KAKAO BLIND RECRUITMENT #72410๋ฒ # lv1
# ๋ฌธ์
์นด์นด์ค์ ์
์ฌํ ์ ์
๊ฐ๋ฐ์ ๋ค์ค๋ "์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ"์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์
ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์
๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. "๋ค์ค"์๊ฒ ์ฃผ์ด์ง ์ฒซ ์
๋ฌด๋ ์๋ก ๊ฐ์
ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์
๋ ฅํ์ ๋, ์
๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์
๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์
๋๋ค.
- ์์ด๋์ ๊ธธ์ด๋ 3์ ์ด์ 15์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
- ์์ด๋๋ ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ๋นผ๊ธฐ(-), ๋ฐ์ค(_), ๋ง์นจํ(.) ๋ฌธ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋จ, ๋ง์นจํ(.)๋ ์ฒ์๊ณผ ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ํ ์ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
"๋ค์ค"๋ ๋ค์๊ณผ ๊ฐ์ด 7๋จ๊ณ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด ์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๊ฐ ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง๋ ์ง ๊ฒ์ฌํ๊ณ ๊ท์น์ ๋ง์ง ์์ ๊ฒฝ์ฐ ๊ท์น์ ๋ง๋ ์๋ก์ด ์์ด๋๋ฅผ ์ถ์ฒํด ์ฃผ๋ ค๊ณ ํฉ๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๊ฐ new_id ๋ผ๊ณ ํ๋ค๋ฉด,
# 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์ด ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ๋์ ๋ถ์
๋๋ค.
์ ๊ท ์ ์ ๊ฐ ์
๋ ฅํ ์์ด๋๋ฅผ ๋ํ๋ด๋ new_id๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, "๋ค์ค"๊ฐ ์ค๊ณํ 7๋จ๊ณ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์น ํ์ ์ถ์ฒ ์์ด๋๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
# ํ์ด
๋ด ํ์ด
def solution(new_id):
new_id = new_id.lower()
answer = ''
for word in new_id: # ํด๋น ์กฐ๊ฑด์ ๋ง๊ฒ or ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์กฐ๊ฑด๋ฌธ์ ๋ฌ์๋ค.
if word == '-' or word == '_' or word == '.' or word.isdigit() or word.isalpha():
answer += word
else:
pass
while '..' in answer: # '..'์ด answer์ ์์ ๋๊น์ง
answer = answer.replace('..', '.')
while answer.startswith('.') or answer.endswith('.'):
# while๋ฌธ ๋ด๋ถ๋ก ๋ฃ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ startswith('.')์ endswith('.')ํ๋ฉด ํด๋น ๋ฌธ์๋ ๋นผ๊ณ ๋ค์
# answer ๋ฌธ์์ด์ ํ ๋นํ๋ค.
if answer.startswith('.'):
answer = answer[1:]
elif answer.endswith('.'):
answer = answer[:-1]
if len(answer) == 0: # answer์ ๊ธธ์ด๊ฐ 0์ด๋ฉด 'a'๋ฅผ ์ถ๊ฐ
answer += 'a'
if len(answer) >= 16: # answer์ ๊ธธ์ด๊ฐ 16์ด์์ด๋ฉด 15๊ฐ์ ์์ ๋ฌธ์์ด๋ง ๋จ๊ธฐ๊ธฐ.
answer = answer[:15]
# ๊ณ์ ์๋๋๋๋ง.. ์๊ณ ๋ณด๋ ์ธ๋ฑ์ค ์ค์ ์ ์๋ชปํด์ ๊ณ์ ๋ชป ํ๊ณ ์๋ค๊ฐ ๊ฒจ์ฐ ๋ฐ๊ฒฌํ๊ณ ๊ณ ์ณค๋ค...
if answer.endswith('.'):
answer = answer[:-1] #
while len(answer) < 3: # ์ญ์ ๋ง์ฐฌ๊ฐ์ง. answer์ ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
answer += answer[-1]
return answer
๋จ์ ํ์ด(๋ธ๋ก๊ทธ ์ฐธ๊ณ )
import re
def solution(new_id):
answer = ''
answer = re.sub('[^a-z\d\_\-\.]','',new_id.lower())
# ์ ๊ทํํ์ : a~z๊น์ง, _, -, .๋ง์ answer์ ๋ด๋๋ค. + ๋ด๊ธด answer์ ๋ฌธ์๋ ์๋ฌธ์๋ก ์นํํ๋ค.
answer = re.sub('\.\.+', '.', answer)
# .. ์ด ๋ฐ๋ณต๋๋ฉด .๋ก ๋ฐ๊พธ๋ผ๋ ์๋ฏธ..? ์ฌ์ค ์ด ๋ค์ ์ฝ๋๋ถํฐ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
answer = re.sub('^\.', '', answer)
if answer == '':
answer = 'a'
answer = re.sub('\.$','', answer[:15])
if len(answer) < 3:
return answer.ljust(3, answer[-1])
return answer
# little_potato.log ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋๋ฐ, ์ ๊ทํํ์์ ๋ํ ์ดํด๊ฐ ์ข ๋ ์์ด์ผ ํ ๋ฏํ๋ค.
์ ๊ทํํ์์ ์ฌ์ฉํ ์ฝ๋๋ค.
์ ๊ทํํ์ (Regular expressions) ์ ํน์ ํ ๊ท์น์ ๊ฐ์ง ๋ฌธ์์ด์ ์งํฉ์ ํํํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ์ ์ธ์ด์ด๋ค. ๋ณต์กํ ๋ฌธ์์ด์ ๊ฒ์๊ณผ ์นํ์ ์ํด ์ฌ์ฉ๋๋ฉฐ, Python ๋ฟ๋ง ์๋๋ผ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ค. ์.. ์์ง ์ํธ๋ฅผ ๋ณด๋ ๋ฏํ ๋ํดํจ๊ณผ ์ด๋ ค์์ด ์๊ธด ํ๋ฐ,(ใ ใ ใ ) ์ ๊ทํํ์์ ์ข ๋ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ฌ์ฉํด์ผ ํ ๋ฏํ๋ค. ์ฝ๋ ์์ฒด๊ฐ ๊ต์ฅํ ๊ฐ๊ฒฐํด์ง๊ณ ํจ์จ์ฑ๋ ๋์ ์ ์ฉํ ๋๊ตฌ์ด๋, ์ถํ ๊ฐ๋ ์ ๋ถ๋ถ์ ๋ค์ ์ ๋ฆฌํด์ ์ฌ๋ ค๋ณด๊ฒ ๋ค.
์ถ์ฒ: https://velog.io/@nellroll/%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9C
์ ๊ท ์์ด๋ ์ถ์ฒ
ํ๋ก๊ทธ๋๋จธ์ค lv1 ์ ๊ท ์์ด๋ ์ถ๋ ฅ ํ์ด์ฌ
velog.io