728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

# 실패

def solution(commands):
    result = []
    answer = [['' for _ in range(50)] for _ in range(50)]
    m = []
    for command in commands:
        inp = command.split();
        if inp[0] == "UPDATE":
            if len(inp) == 4:
                i = -1
                len_m = len(m)
                if len_m > 0:
                    for i in range(len_m):
                        if (inp[1], inp[2]) in m[i]:
                            break

                    for ii in m[i]:
                        answer[int(ii[0])-1][int(ii[1])-1] = inp[3]
                else:
                    answer[int(inp[1])-1][int(inp[2])-1] = inp[3]
            else:
                for a in range(50):
                    answer[a] = ','.join(answer[a]).replace(inp[1], inp[2]).split(',')
        elif inp[0] == "MERGE" and (inp[1] != inp[3] or inp[2] != inp[4]):
            change = answer[int(inp[3])-1][int(inp[4])-1] if answer[int(inp[1])-1][int(inp[2])-1] == '' else answer[int(inp[1])-1][int(inp[2])-1]  
            answer[int(inp[3])-1][int(inp[4])-1] = change

            plug = False
            if (inp[1] == inp[3] and abs(int(inp[2])-int(inp[4])) > 1) or (inp[2] == inp[4] and abs(int(inp[1])-int(inp[3])) > 1):
                plug = True
                
            
            if len(m) == 0:
                m.append([(inp[1],inp[2]), (inp[3],inp[4])])
                
            elif plug == False:
                pos = -1
                for i in range(len(m)):
                    if (inp[1],inp[2]) in m[i] or (inp[3],inp[4]) in m[i]:
                        pos = i
                    if set(m[i]) & { (inp[1],inp[2]), (inp[3],inp[4]) } != {}:
                        m[i] = list(set(m[i] + [(inp[1],inp[2])] + [(inp[3],inp[4])]))

                if pos != -1:
                    for ii in m[pos]:
                        answer[int(ii[0])-1][int(ii[1])-1] = change


        elif inp[0] == "UNMERGE":
            pos = 0
            limit = len(m)
            del_l = []
            for i in range(len(m)):
                if (inp[1], inp[2]) in m[i]:
                    del_l.append(i)
            print(del_l)
            for i in range(len(del_l)):
                for ii in m[del_l[i]]:
                    if ii != (inp[1], inp[2]):
                        answer[int(ii[0])-1][int(ii[1])-1] = ''
            print(list(reversed(del_l)))
            
            if len(del_l) > 0:
                for i in list(reversed(del_l)):
                    del m[i]
            
        elif inp[0] == "PRINT":            
            if answer[int(inp[1])-1][int(inp[2])-1] == '':
                result.append('EMPTY')
            else:
                result.append(answer[int(inp[1])-1][int(inp[2])-1])
    return result

 

# 휴..

union find ? 라는 알고리즘을 사용하라고 하는데 너무 어렵다. 나중에 공부해야지

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기