[νλ‘κ·Έλλ¨Έμ€/python] 2021 KAKAO BLIND RECRUITMENT : μ κ· μμ΄λ μΆμ²
λ¬Έμ μ€λͺ
μΉ΄μΉ΄μ€μ μ
μ¬ν μ μ
κ°λ°μ λ€μ€λ "μΉ΄μΉ΄μ€κ³μ κ°λ°ν"μ λ°°μΉλμ΄, μΉ΄μΉ΄μ€ μλΉμ€μ κ°μ
νλ μ μ λ€μ μμ΄λλ₯Ό μμ±νλ μ
무λ₯Ό λ΄λΉνκ² λμμ΅λλ€. "λ€μ€"μκ² μ£Όμ΄μ§ 첫 μ
무λ μλ‘ κ°μ
νλ μ μ λ€μ΄ μΉ΄μΉ΄μ€ μμ΄λ κ·μΉμ λ§μ§ μλ μμ΄λλ₯Ό μ
λ ₯νμ λ, μ
λ ₯λ μμ΄λμ μ μ¬νλ©΄μ κ·μΉμ λ§λ μμ΄λλ₯Ό μΆμ²ν΄μ£Όλ νλ‘κ·Έλ¨μ κ°λ°νλ κ²μ
λλ€.
λ€μμ μΉ΄μΉ΄μ€ μμ΄λμ κ·μΉμ
λλ€.
- μμ΄λμ κΈΈμ΄λ 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 ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ.
μ νμ¬ν
new_idλ κΈΈμ΄ 1 μ΄μ 1,000 μ΄νμΈ λ¬Έμμ΄μ
λλ€.
new_idλ μνλ²³ λλ¬Έμ, μνλ²³ μλ¬Έμ, μ«μ, νΉμλ¬Έμλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
new_idμ λνλ μ μλ νΉμλ¬Έμλ -_.~!@#$%^&*()=+[{]}:?,<>/ λ‘ νμ λ©λλ€.
μ λ΅
def solution(new_id):
answer = ''
# 1λ¨κ³ : λͺ¨λ λλ¬Έμ μλ¬Έμλ‘ μΉν
new_id = new_id.lower()
# 2λ¨κ³ : μλ¬Έμ, μ«μ, κ°λ₯ λ¬Έμ μ μΈ μ κ±° ν answerμ μ μ₯
sp = ["-", "_", "."]
for i in new_id:
if i.isalnum() or i in sp:
answer += i
# 3λ¨κ³ : .κ° λλ² μ΄μ λμ¬ λ . νλλ‘ μΉν
while ".." in answer:
answer = answer.replace("..", ".")
# 4λ¨κ³ : μ²μμ΄λ λμ . μμΉνλ©΄ μ κ±°
if answer and answer[0] == ".":
answer = answer[1:]
if answer and answer[-1] == ".":
answer = answer[:-1]
# 5λ¨κ³ : λΉ λ¬Έμμ΄μ΄λ©΄ a λμ
if answer == "":
return "aaa"
# 6λ¨κ³ : 16μ μ΄μμ΄λ©΄ 16μλΆν° μμ , λ§μ§λ§ λ¬Έμ .μ΄λ©΄ μμ
if len(answer) >= 16:
answer = answer[:15]
if answer[-1] == ".":
answer = answer[:-1]
# 7λ¨κ³ : 2μ μ΄νλΌλ©΄ λ§μ§λ§ λ¬Έμ 3μ λ λκΉμ§ λ°λ³΅
elif len(answer) <= 2:
answer += answer[-1]*(3-len(answer))
return answer
3λ¨κ³μμ whileλ¬Έμ μ¬μ©νμ¬ ".."μ΄ answerμ ν¬ν¨λ λμ ".."μ "."μΌλ‘ μΉννλ€.
"...."μΌ κ²½μ°λ "..." -> ".." -> "." μΌλ‘ λ°λλ―λ‘ .μ΄ μ¬λ¬λ² λμ€λλΌλ κ°λ₯νλ€.
4λ¨κ³μμ answerμ 첫문μμ λλ¬Έμλ₯Ό νμΈν λ answerκ° λΉμ΄μλμ§ νμΈ ν μ κ±°ν΄μΌνλ€.
answerλ₯Ό νμΈνμ§ μκ³ λ°λ‘ answer[0]μ answer[-1]μ νμΈνμ λ
answerκ° λΉμ΄μλ€λ©΄ μΈλ±μ€ μλ¬κ° λλ€.
5λ¨κ³μμ λΉ λ¬Έμμ΄μΌ λ aλ₯Ό λμ ν ν 7λ¨κ³λ₯Ό κ±°μ³μΌνλ€.
κ·Έλ¬λ λΉ λ¬Έμμ΄μ΄λ©΄ κ²°κ³Όμ μΌλ‘ aaaλ₯Ό λ°νν΄μΌνκΈ° λλ¬Έμ
λ°λ‘ aaaλ₯Ό returnνλ€.