ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023 KAKAO BLIND RECRUITMENT - 표 병합
    코딩 테스트/Level 3 2023. 1. 8. 20:03
    반응형

    https://school.programmers.co.kr/learn/courses/30/lessons/150366

    단순하게 리스트로 머지 상태를 관리했다. 

    def solution(commands):
        def rc2index(r, c):
            return (int(r) - 1) * 50 + int(c) - 1
    
        def update(p, s):
            old_state = states[p]
            for index in range(length):
                if states[index] == old_state:
                    table[index] = s
    
        def replace(s1, s2):
            for index in range(length):
                if table[index] == s1:
                    table[index] = s2
    
        def merge(p1, p2):
            change = None
            if table[p1] != 'EMPTY' and table[p2] == 'EMPTY':
                change = table[p1]
            elif table[p1] == 'EMPTY' and table[p2] != 'EMPTY':
                change = table[p2]
            elif table[p1] != 'EMPTY' and table[p2] != 'EMPTY':
                change = table[p1]
            old_state = states[p2]
            for index in range(length):
                if states[index] == old_state:
                    states[index] = states[p1]
            if change:
                for index in range(length):
                    if states[index] == states[p1]:
                        table[index] = change
    
        def unmerge(p):
            old_value = table[p]
            old_state = states[p]
            for index in range(length):
                if states[index] == old_state:
                    states[index] = index
                    table[index] = 'EMPTY'
            table[p] = old_value
    
        def print_(p):
            answer.append(table[p])
    
        def solve():
            for line in commands:
                command, *tokens = line.split()
                if command == 'UPDATE':
                    if len(tokens) > 2:
                        update(rc2index(tokens[0], tokens[1]), tokens[2])
                    else:
                        replace(tokens[0], tokens[1])
                elif command == 'MERGE':
                    merge(rc2index(tokens[0], tokens[1]), rc2index(tokens[2], tokens[3]))
                elif command == 'UNMERGE':
                    unmerge(rc2index(tokens[0], tokens[1]))
                elif command == 'PRINT':
                    print_(rc2index(tokens[0], tokens[1]))
    
        length = 2500
        answer = []
        table = ['EMPTY'] * length
        states = list(range(length))
        solve()
        return answer
    테스트 1 〉	통과 (2.80ms, 10.4MB)
    테스트 2 〉	통과 (1.43ms, 10.3MB)
    테스트 3 〉	통과 (0.86ms, 10.4MB)
    테스트 4 〉	통과 (0.51ms, 10.3MB)
    테스트 5 〉	통과 (1.67ms, 10.3MB)
    테스트 6 〉	통과 (1.93ms, 10.4MB)
    테스트 7 〉	통과 (2.79ms, 10.3MB)
    테스트 8 〉	통과 (3.98ms, 10.3MB)
    테스트 9 〉	통과 (9.41ms, 10.4MB)
    테스트 10 〉	통과 (8.95ms, 10.3MB)
    테스트 11 〉	통과 (9.57ms, 10.4MB)
    테스트 12 〉	통과 (10.79ms, 10.3MB)
    테스트 13 〉	통과 (104.07ms, 10.4MB)
    테스트 14 〉	통과 (102.26ms, 10.3MB)
    테스트 15 〉	통과 (130.07ms, 10.3MB)
    테스트 16 〉	통과 (136.00ms, 10.4MB)
    테스트 17 〉	통과 (105.26ms, 10.5MB)
    테스트 18 〉	통과 (124.98ms, 10.2MB)
    테스트 19 〉	통과 (140.12ms, 10.4MB)
    테스트 20 〉	통과 (101.81ms, 10.5MB)
    테스트 21 〉	통과 (259.23ms, 10.3MB)
    테스트 22 〉	통과 (98.30ms, 10.3MB)
    반응형
Designed by Tistory.