[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€/python] 2021 KAKAO BLIND RECRUITMENT : μ‹ κ·œ 아이디 μΆ”μ²œ

2021. 6. 29. 15:26

문제 μ„€λͺ…

μΉ΄μΉ΄μ˜€μ— μž…μ‚¬ν•œ μ‹ μž… 개발자 λ„€μ˜€λŠ” "μΉ΄μΉ΄μ˜€κ³„μ •κ°œλ°œνŒ€"에 λ°°μΉ˜λ˜μ–΄, 카카였 μ„œλΉ„μŠ€μ— κ°€μž…ν•˜λŠ” μœ μ €λ“€μ˜ 아이디λ₯Ό μƒμ„±ν•˜λŠ” 업무λ₯Ό λ‹΄λ‹Ήν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. "λ„€μ˜€"μ—κ²Œ 주어진 첫 μ—…λ¬΄λŠ” μƒˆλ‘œ κ°€μž…ν•˜λŠ” μœ μ €λ“€μ΄ 카카였 아이디 κ·œμΉ™μ— λ§žμ§€ μ•ŠλŠ” 아이디λ₯Ό μž…λ ₯ν–ˆμ„ λ•Œ, μž…λ ₯된 아이디와 μœ μ‚¬ν•˜λ©΄μ„œ κ·œμΉ™μ— λ§žλŠ” 아이디λ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
λ‹€μŒμ€ 카카였 μ•„μ΄λ””μ˜ κ·œμΉ™μž…λ‹ˆλ‹€.

  • μ•„μ΄λ””μ˜ κΈΈμ΄λŠ” 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ν•œλ‹€.

728x90

BELATED ARTICLES

more