나의 풀이

def solution(numbers, hand):
    dist = [
        [3, 1], # 0
        [0, 0], # 1
        [0, 1], # 2
        [0, 2], # 3
        [1, 0], # 4
        [1, 1], # 5
        [1, 2], # 6
        [2, 0], # 7
        [2, 1], # 8
        [2, 2], # 9
        [3, 0], # 10 -> *
        [3, 2], # 11 -> #
    ]
    
    l, r = 10, 11
    answer = ''
    
    for number in numbers:
        if number in [1, 4, 7]:
            answer += "L"
            l = number
        
        elif number in [3, 6, 9]:
            answer += "R"
            r = number
        
        else:
            dist_l = abs(dist[number][0] - dist[l][0]) + abs(dist[number][1] - dist[l][1])
            dist_r = abs(dist[number][0] - dist[r][0]) + abs(dist[number][1] - dist[r][1])
            
            if dist_l > dist_r:
                answer += "R"
                r = number
            
            elif dist_l < dist_r:
                answer += "L"
                l = number
            
            else:
                if hand == "right":
                    answer += "R"
                    r = number
                else:
                    answer += "L"
                    l = number
                

    return answer

 

Key Point

1. 동일 번호를 여러번 누를 때

2. *, #에서 바로 2,5,8,0을 누를 때

3. 대각선은 생각하지 않고 한 칸씩 이동해야 함.,

나의 풀이

def solution(new_id):
    alphabet = [chr(i) for i in range(ord('a'), ord('z') + 1)]
    numbers = [str(i) for i in range(10)]
    validation = alphabet + numbers + ['-', '_', '.']

    # level 1, 2
    for i, j in enumerate(new_id):
        if j.isupper():
            new_id = new_id.replace(j, j.lower())

        if j not in validation:
            new_id = new_id.replace(j, '')
    print("level 1, 2", new_id)

    # level 3
    new_id = [i for i in new_id]
    for i in range(len(new_id) - 1):
        if new_id[i] == '.':
            if new_id[i + 1] == '.':
                new_id[i] = ''
    print("level 3 ", "".join(map(str, new_id)))

    # level 4
    new_id = "".join(map(str, new_id))
    new_id = [i for i in new_id]
    while True:
        if new_id[0] == '.':
            new_id[0] = ''
            continue

        if new_id[-1] == '.':
            new_id[-1] = ''
            continue
        break
    new_id = "".join(map(str, new_id))
    print("level 4 ", new_id)

    # level 5
    if not any(new_id):
        new_id = 'a'
    print("level 5 ", new_id)

    # level 6
    new_id = [i for i in new_id]
    if len(new_id) >= 16:
        new_id = new_id[:15]
        while True:
            if new_id[-1] == '.':
                new_id[-1] = ''
                continue
            break
    new_id = "".join(map(str, new_id))
    print("level 6 ", new_id)

    # level 7
    if len(new_id) <= 2:
        new_id = new_id + new_id[-1] * (3 - len(new_id))
    print("level 7", new_id)

    return new_id

 

배울만한 코드

def solution(new_id):
    answer = ""
    
    # level 1
    new_id = new_id.lower()
    
    # level 2
    for i in new_id:
        if i.isalpha() or i.isdigit() or i in ['-', '_', '.']:
            answer += i
        
    # level 3
    while '..' in answer:
        answer = answer.replace('..', '.')
    
    # level 4
    if answer[0] == '.':
        answer = answer[1:] if len(answer) > 1 else '.'
    if answer[-1] == '.':
        answer = answer[:-1]
    
    # level 5
    if answer == "":
        answer = 'a'

    # level 6
    if len(answer) > 15:
        answer = answer[:15]
        if answer[-1] == '.':
            answer = answer[:-1]
    
    # level 7
    while len(answer) < 3:
        answer += answer[-1]
    
    return answer

 

정말 모든면에서 나보다 완벽한 코드라 보면서 머리가 멍한 기분이 들었다.

isalpha(), isdigit(), while '..' in answer:, .... 많은 성장을 할 수 있는 답안이었다.

나의 답안

def solution(dartResult):
    answer = []
    cur = 0
    i = 0

    while i < len(dartResult):
        if dartResult[i].isdigit():
            answer.append(cur)
            if dartResult[i + 1].isdigit():
                cur = 10
                i += 2
                continue
            cur = int(dartResult[i])

        elif dartResult[i] == 'D':
            cur = cur ** 2

        elif dartResult[i] == 'T':
            cur = cur ** 3

        if dartResult[i] == '*':
            if any(answer):
                answer[-1] *= 2
            cur *= 2

        elif dartResult[i] == '#':
            cur *= -1

        i += 1

    answer.append(cur)
    return sum(answer)

나의 답안

def solution(N, stages):
    answer = {}
    n = len(stages)
    
    for i in range(1, N + 1):
        if n != 0:
            cnt = stages.count(i)
            answer[i] = cnt / n
            n -= cnt
        else:
            answer[i] = 0

    return sorted(answer, key=lambda x: answer[x], reverse=True)

 

+ Recent posts