κ°œμΈκ³΅λΆ€/Algorithm

[Level 1] μ‹ κ·œ 아이디 μΆ”μ²œ

πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 5. 5. 23:21

 

 

 

Algorithm

-  μ‹ κ·œ 아이디 μΆ”μ²œ -

 


 

문제

μΉ΄μΉ΄μ˜€μ— μž…μ‚¬μ•ˆ μ‹ μž… 개발자 "λ„€μ˜€"λŠ” "μΉ΄μΉ΄μ˜€κ³„μ •κ°œλ°œνŒ€"에 λ°°μΉ˜λ˜μ–΄, 카카였 μ„œλΉ„μŠ€μ— κ°€μž…ν•˜λŠ” μœ μ €λ“€μ˜ 아이디λ₯Ό μƒμ„±ν•˜λŠ” 업무λ₯Ό λ‹΄λ‹Ήν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

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

 

- μ•„μ΄λ””μ˜ κΈΈμ΄λŠ” 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에 λ‚˜νƒ€λ‚  수 μžˆλŠ” νŠΉμˆ˜λ¬ΈμžλŠ” -_.~!@#$%^&*()=+[{]}:?,<>/ 둜 ν•œμ •λ©λ‹ˆλ‹€.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

no new_id result
예1 "...!@BaT#*..y.abcdefghijklm" "bat.y.abcdefghi"
예2 "=.=" "aaa"

 

문제 ν’€κΈ°

 

μ™€μš°! 이번 λ¬Έμ œλŠ” ν‘ΈλŠ”λ° μ‹œκ°„μ΄ κ½€ 걸리기도 ν–ˆμ§€λ§Œ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ‚˜μ”© 진행해 λ³Έλ‹€κ³  μ‹œκ°„μ΄ 더 였래 걸린것 κ°™λ‹€.

 

μ›λž˜λŠ” solutionν•¨μˆ˜ μ•ˆμ— λͺ¨λ“  것을 λ‹€ 진행을 해보렀고 ν–ˆμœΌλ‚˜ 그러면 문제λ₯Ό ν•΄κ²°ν•˜κΈ°μ „μ— 가독성이 λ„ˆλ¬΄ μ•ˆμ’‹κ³  μ½”λ“œκ°€ 많이 λ”λŸ¬μ›Œ 질 것 κ°™μ•„μ„œ 총 7단계λ₯Ό 진행해야 ν•˜λ‹ˆ 각각의 풀이 방법을 ν•œ ν•¨μˆ˜μ— λ„£μ–΄μ„œ solutionμ—μ„œλŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚€λŠ” λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•΄ λ³΄μ•˜λ‹€.

 

그리고 μ½”λ“œμ˜ 양이 μƒλ‹Ήν•˜λ‹€λ³΄λ‹ˆ ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ½νžˆλŠ”λ°μ—λ„ νŽΈν•˜κ³  μ½”λ“œμ˜ 양을 μ‘°κΈˆμ΄λΌλ„ μ€„μ—¬λ³΄κ³ μž λ…Έλ ₯을 ν•΄λ³΄μ•˜λ‹€.

 

λ‹¨κ³„λ³„λ‘œ ν•˜λ‚˜μ”© κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•΄λ³΄μžλ©΄, λ¨Όμ € 1λ‹¨κ³„μ—μ„œλŠ” idμ•ˆμ— μžˆμ„ λŒ€λ¬Έμžλ₯Ό μ†Œλ¬Έμžλ‘œ λ°”κΏ”μ€˜μ•Όν•˜λ‹ˆ toLowerCase()λ₯Ό μ‚¬μš©ν•΄μ„œ λͺ¨λ“  문자λ₯Ό μ†Œλ¬Έμžλ‘œ μΉ˜ν™˜ν•΄μ£Όμ—ˆλ‹€.

 

2λ‹¨κ³„μ—μ„œλŠ” νŠΉμ • 문자λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λ¬ΈμžλŠ” μ œμ™Έμ‹œμΌœμ•Όν–ˆκΈ° λ•Œλ¬Έμ— 일단 μ œμ™Έν•΄μ•Όν•  λ¬Έμžλ“€μ„ ν•œκ³³μ— λ‹΄μ•„λ‘” λ‹€μŒμ— filterλ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή λ¬Έμžλ“€μ΄ μ•„λ‹Œ λ‚˜λ¨Έμ§€ λ¬Έμžλ“€λ§Œ 리턴될 수 μžˆλ„λ‘ μ„€μ •ν•΄ μ£Όμ—ˆλ‹€.

 

그리고 filterλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„  배열을 μ΄μš©ν•΄μ•Όν–ˆκΈ° λ•Œλ¬Έμ— split으둜 μͺΌκ° λ’€μ— join으둜 λ‹€μ‹œ ν•©μΉ˜λŠ” 과정도 μžŠμ§€ μ•Šμ•˜λ‹€.

 

3λ‹¨κ³„μ—μ„œλŠ” λ§ˆμΉ¨ν‘œκ°€ 2λ²ˆμ΄μƒ 반볡된 ꡬ간을 1개둜 μΉ˜ν™˜ν•˜λŠ” κ²ƒμœΌλ‘œ μ˜ˆμ „μ— 이런 λΉ„μŠ·ν•œ 문제λ₯Ό ν’€μ–΄λ³΄μ•˜κΈ° λ•Œλ¬Έμ— 그전에 ν’€μ—ˆλ˜ 방식과 λΉ„μŠ·ν•œ λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•΄μ£Όμ—ˆλ‹€.

 

4λ‹¨κ³„μ—μ„œλŠ” λ§ˆμΉ¨ν‘œκ°€ μ²˜μŒμ΄λ‚˜ 끝에 μžˆμ„ κ²½μš°μ— μ œκ±°ν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ 쑰건문을 μ‚¬μš©ν•΄ 쑰건에 μ„±λ¦½λ˜λŠ” 것에 따라 λ§žμΆ°μ€˜μ„œ 값듀이 리턴될 수 μžˆλ„λ‘ μ„€μ •ν•΄ μ£Όμ—ˆλ‹€.

 

5단계 μ—μ„œλŠ” λΉˆλ¬Έμžμ—΄μΌλ•Œ 'a'λ₯Ό λ„£λŠ” κ²ƒμœΌλ‘œ μ‚Όν•­μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄μ„œ λ§€κ°œλ³€μˆ˜λ‘œ 받은 λ¬Έμžμ—΄μ˜ 길이가 0μΌλ•Œ 'a'λ₯Ό λ„£μ–΄μ£ΌλŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•΄ μ£Όμ—ˆλ‹€.

 

6λ‹¨κ³„μ˜ˆμ„œλŠ” λ¬Έμžμ—΄μ˜ 길이가 16자 μ΄μƒμ‹œ 15개λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€λ₯Ό μ‚­μ œν•΄μ£Όλ˜, 이후에 λ§ˆμ§€λ§‰μ— λ§ˆμΉ¨ν‘œκ°€ 있으면 ν•΄λ‹Ή λ§ˆμΉ¨ν‘œλ„ μ‚­μ œν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ λ§ˆμ°¬κ°€μ§€κ³  쑰건문을 μ‚¬μš©ν•΄μ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄ μ£Όμ—ˆλ‹€.

 

λ§ˆμ§€λ§‰ 7λ‹¨κ³„λŠ” λ¬Έμžμ—΄μ˜ 길이가 2자 μ΄ν•˜μΌ κ²½μš°μ— λ§ˆμ§€λ§‰ 문자λ₯Ό 길이가 3이 λ λ•ŒκΉŒμ§€ λ°˜λ³΅ν•˜λ„λ‘ λ°˜λ³΅λΆ„ while을 μ‚¬μš©ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•΄μ£Όμ—ˆλ‹€.

 

사싀 쒀더 λ…Έλ ₯ν•˜λ©΄ μ½”λ“œμ˜ 길이λ₯Ό 쀄일 수 μžˆμ„κ²ƒ κ°™κΈ΄ν•œλ° κ·Έλ ‡κ²Œ 되면 가독성이 μ—„μ²­ λ–¨μ–΄μ§ˆκ²ƒ κ°™μ•„μ„œ μ—¬κΈ°μ„œ 마무리 지어야겠닀 γ…Žγ…Žγ…Ž

 

 

λ°˜μ‘ν˜•