์ ๊ท ์์ด๋ ์ถ์ฒ
๋ฌธ์
์นด์นด์ค์ ์ ์ฌํ ์ ์ ๊ฐ๋ฐ์ ๋ค์ค๋ "์นด์นด์ค๊ณ์ ๊ฐ๋ฐํ"์ ๋ฐฐ์น๋์ด, ์นด์นด์ค ์๋น์ค์ ๊ฐ์ ํ๋ ์ ์ ๋ค์ ์์ด๋๋ฅผ ์์ฑํ๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์์ต๋๋ค. "๋ค์ค"์๊ฒ ์ฃผ์ด์ง ์ฒซ ์ ๋ฌด๋ ์๋ก ๊ฐ์ ํ๋ ์ ์ ๋ค์ด ์นด์นด์ค ์์ด๋ ๊ท์น์ ๋ง์ง ์๋ ์์ด๋๋ฅผ ์ ๋ ฅํ์ ๋, ์ ๋ ฅ๋ ์์ด๋์ ์ ์ฌํ๋ฉด์ ๊ท์น์ ๋ง๋ ์์ด๋๋ฅผ ์ถ์ฒํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์นด์นด์ค ์์ด๋์ ๊ท์น์ ๋๋ค.
์์ด๋์ ๊ธธ์ด๋ 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๋ ๊ธธ์ด 1 ์ด์ 1,000 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
new_id๋ ์ํ๋ฒณ ๋๋ฌธ์, ์ํ๋ฒณ ์๋ฌธ์, ์ซ์, ํน์๋ฌธ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
new_id์ ๋ํ๋ ์ ์๋ ํน์๋ฌธ์๋ -_.~!@#$%^&*()=+[{]}:?,<>/ ๋ก ํ์ ๋ฉ๋๋ค.
> 2021 KAKAO BLIND RECRUITMENT ๋ฌธ์ ์ด๋ค.
๊ฐ ๋จ๊ณ๋ณ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํํ์๋ค.
from collections import deque
def solution(new_id):
answer =''
# 1๋จ๊ณ : ์๋ฌธ์ ๋ณํ
new_id = new_id.lower()
# 2๋จ๊ณ : ํน์๋ฌธ์ ์ ๊ฑฐ
for c in new_id:
if (97 <= ord(c) <= 122) or (48 <= ord(c) <= 57) or c == '-' or c == '_' or c == '.' :
answer += c
else :
continue
# 3๋จ๊ณ : ๋ง์นจํ ์ค์ด๊ธฐ
temp =''
dq = deque()
for c in answer:
if c == '.':
dq.append(c)
else :
if len(dq) > 0:
temp += dq.pop()
dq.clear()
temp += c
answer = temp
# 4๋จ๊ณ : ์ฒ์๊ณผ ๋ ๋ง์นจํ ์ ๊ฑฐ
if len(answer) > 0 and answer[0] == '.' :
answer = answer[1:]
if len(answer) > 0 and answer[len(answer)-1] == '.':
answer = answer[:len(answer)-1]
# 5๋จ๊ณ : ๋น ๋ฌธ์์ด์ ๊ฒฝ์ฐ a๋ก ์นํ
if answer == '':
answer = 'a'
# 6๋จ๊ณ : ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ผ๋ฉด ์ฒซ 15๊ฐ์ ๋ฌธ์๋ง ์ถ์ถ
if len(answer) >= 16 :
answer = answer[0:15]
print(answer)
# 6-1๋จ๊ณ: ๋ง์ผ ์ ๊ฑฐ ํ ๋ง์นจํ๊ฐ ๋์ ์๋ค๋ฉด ์ ๊ฑฐ
if answer[len(answer)-1] == '.':
answer = answer[:len(answer)-1]
print(answer)
# 7๋จ๊ณ : ๊ธธ์ด๊ฐ 2์ ์ดํ๋ผ๋ฉด, ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ง์ง๋ง ๋ฌธ์ ๋ฐ๋ณต
if len(answer) <= 2:
addChar = answer[len(answer)-1]
while len(answer) != 3 :
answer += addChar
# ์ฃผ์: ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ ์ฌ์ฉ์ ๋ท๊ตฌ๊ฐ ์ด๋ฆฐ ๊ตฌ๊ฐ์ธ ์ ๊ธฐ์ตํ๊ธฐ.
return answer
- ๋จผ์ ์ธ์๋ก ๋ค์ด์จ ๋ฌธ์์ด ์ค ๋๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณํ.
- ํน์๋ฌธ์์ ๊ฑฐ(ASCII ์ด์ฉ)
- ๋ง์นจํ ์ค์ด๊ธฐ(replaceํจ์๋ฅผ ์ด์ฉํ๋ค๋ ์๊ฐ์ ํ์ง๋ชปํด์ ์ผ๋จ deque์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ์คํ์ฒ๋ผ ์ฌ์ฉ)
- ์ฒ์๊ณผ ๋ ๋ง์นจํ ์ ๊ฑฐ(arrange error ๋ฐฉ์ง)
- ๋น ๋ฌธ์์ด์ ๊ฒฝ์ฐ a๋ก ์นํ
- ๊ธธ์ด๊ฐ 16์ ์ด์์ด๋ผ๋ฉด ์๋ถ๋ถ 15๊ฐ์ ๋ฌธ์์ด ์ถ์ถ
6-1. ์ถ์ถํ ๊ฐ์ฅ ๋ ๋ฌธ์๊ฐ ๋ง์นจํ('.')๋ผ๋ฉด ์ ๊ฑฐ - ๊ธธ์ด๊ฐ 2๊ธ์ ์ดํ๋ผ๋ฉด, ๊ธธ์ด๊ฐ 3์ด ๋ ๋๊น์ง ๋ง์ง๋ง ๋ฌธ์ ๋ฐ๋ณต
์ฃผ์ :
๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ ์ฌ์ฉ์ ๋ท๊ตฌ๊ฐ์ด ์ด๋ฆฐ ๊ตฌ๊ฐ์ธ ์ ์ ํญ์ ์์ง๋ง์(์ด๊ฑฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค์.)
๋ฌธ์ ์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค https://programmers.co.kr/
'๐ฏ CodingTest > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2022.04.09 |
---|---|
[Programmers] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2022.04.09 |
[Programmers]๋ถ์กฑํ ๊ธ์ก ๊ณ์ฐํ๊ธฐ (0) | 2022.04.05 |
[Programmers]์ ํ๋ฒํธ ๋ชฉ๋ก - ํด์ (0) | 2022.04.05 |
[Programmers]์์ฃผํ์ง ๋ชปํ ์ ์ - ํด์ (0) | 2022.04.05 |