ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [lv1] ์‹ ๊ทœ์•„์ด๋””์ถ”์ฒœ

2021. 7. 22. 01:00ใ†๐Ÿ”ฑ Algorithm

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ

์นด์นด์˜ค์— ์ž…์‚ฌํ•œ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๋„ค์˜ค๋Š” "์นด์นด์˜ค๊ณ„์ •๊ฐœ๋ฐœํŒ€"์— ๋ฐฐ์น˜๋˜์–ด, ์นด์นด์˜ค ์„œ๋น„์Šค์— ๊ฐ€์ž…ํ•˜๋Š” ์œ ์ €๋“ค์˜ ์•„์ด๋””๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋„ค์˜ค"์—๊ฒŒ ์ฃผ์–ด์ง„ ์ฒซ ์—…๋ฌด๋Š” ์ƒˆ๋กœ

programmers.co.kr

 

โœ… ์ ‘๊ทผ

์ง€๋ฌธ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด ๋‹นํ™ฉํ–ˆ์ง€๋งŒ, ์ ํžŒ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋˜๋Š” ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด์˜ ์•ž๋‹จ๊ณผ ๋’ท๋‹จ์—์„œ ๋นผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜์—ฌ deque() ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

 

from collections import deque


def solution(new_id):
    # 1๋‹จ๊ณ„
    new_id = new_id.lower()

    # 2๋‹จ๊ณ„
    second = ''
    for l in new_id:
        if l.isdigit() or l.isalpha() or l in ['-', '_', '.']:
            second += l

    # 3๋‹จ๊ณ„
    while True:
        if '..' in second:
            second = second.replace('..', '.')
        else:
            break

    # 4๋‹จ๊ณ„
    second = deque(second)
    if second[0] == '.':
        second.popleft()

    if second and second[-1] == '.':
        second.pop()

    # 5๋‹จ๊ณ„
    if not second:
        second = 'a'

    # 6๋‹จ๊ณ„
    second = list(second)
    if len(second) >= 16:
        second = second[0:15]
        if second[-1] == '.':
            second = second[0:14]

    # 7๋‹จ๊ณ„ 
    while len(second) <= 2:
        second += second[-1]

    return ''.join(second)

 

โ„๏ธ ์ฃผ์˜

์ €๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 3,4,5,11,15์—์„œ ์‹คํŒจํ–ˆ๋Š”๋ฐ, ์ด์œ ๋Š” 4๋‹จ๊ณ„์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

(a)์ฒซ๋ฒˆ์งธ ๋ฌธ์ž ํ˜น์€ (b)๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ "."์ธ ๊ฒฝ์šฐ์— popleft(), pop() ์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ,

if ~ else if  ๊ตฌ๋ฌธ์„ ์ผ๊ธฐ ๋•Œ๋ฌธ์— (a), (b) ๋ชจ๋“  ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ (a) ์— ๋Œ€ํ•ด์„œ๋งŒ ์‹คํ–‰๋์Šต๋‹ˆ๋‹ค.

if~ else if ๊ตฌ๋ฌธ์ด ์•„๋‹Œ 2๊ฐœ์˜ if ๊ตฌ๋ฌธ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์ฒซ๋ฒˆ์งธ if ๋ฌธ์ด ์‹คํ–‰๋œ ํ›„, ๋ฌธ์ž์—ด์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ๋‘๋ฒˆ์งธ if ๋ฌธ์—์„œ ๊ณง๋ฐ”๋กœ pop() ํ•  ๋ฌธ์ž๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค. 

๋•Œ๋ฌธ์— second ๋ผ๋Š” ๋ฌธ์ž์—ด์ด ๋จผ์ € ์กด์žฌํ•˜๋Š”์ง€(if second and ...) ํ™•์ธ ํ›„ ์กฐ๊ฑด๋ฌธ์„ ์‹คํ–‰ํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿฆ ์ •๊ทœ ํ‘œํ˜„์‹ ํ’€์ด

์ •๊ทœํ‘œํ˜„์‹์„ ์ด์šฉํ•œ ํ’€์ด๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด .isdigit() ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋ฅด๋”๋ผ๋„ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

def solution2(new_id):

    # 1 : ์†Œ๋ฌธ์ž ์น˜ํ™˜
    new_id = new_id.lower()

    # 2 : ํŠน์ • ๋ฌธ์ž ์™ธ ์ œ๊ฑฐ
    answer = re.sub('[^a-z\d\-\_\.]', '', new_id)

    # 3 : ๋งˆ์นจํ‘œ 2๋ฒˆ ์—ฐ์†์€ ํ•˜๋‚˜๋กœ ์น˜ํ™˜
    answer = re.sub('\.\.+', '.', answer)

    # 4 : ์–‘ ๋ ๋งˆ์นจํ‘œ ์ œ๊ฑฐ
    answer = re.sub('^\.|\.$', '', answer)

    # 5 : ๋นˆ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ 'a' ์ถ”๊ฐ€
    if not answer:
        answer = 'a'

    # 6 : ๊ธธ์ด๊ฐ€ 16์ž ์ด์ƒ์ด๋ฉด 1~15์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ & ๋งจ ๋ ๋งˆ์นจํ‘œ ์ œ๊ฑฐ
    answer = re.sub('\.$', '', answer[0:15])

    # 7 : ๊ธธ์ด๊ฐ€ 2 ์ดํ•˜๋ฉด, 3์ด ๋  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋ถ™์ธ๋‹ค.
    while len(answer) < 3:
        answer += answer[-1]

    return answer