이숭간 공부기록

[프로그래머스] 파이썬 _ 표 편집 ( 2021 KAKAO INTERN) ( 효율성 통과 X) 본문

알고리즘/프로그래머스

[프로그래머스] 파이썬 _ 표 편집 ( 2021 KAKAO INTERN) ( 효율성 통과 X)

이숭간 2021. 7. 8. 14:44
728x90

https://programmers.co.kr/learn/courses/30/lessons/81303

 

코딩테스트 연습 - 표 편집

8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"

programmers.co.kr

 

문제유형 : 구현

 

문제풀이 : 

 

  • 일단 이문제는 내가 푼 시점에서 푼사람이 0명인 문제다...  얼마전에 올라온건가??
  • 2시간동안 풀었는데 결국 효율성을 통과하지 못했다.. 최초가 되고싶었는데.. 근데 검색해도 하나도 안나오고 질문하기도 0이라 도저히 머리가 터질거같아서 일단 이쯤하고 올려둔다. 아시는분있음 댓글좀 부탁드립니닷
  • 나중에 다시 풀러 오겠다.

 

 

 

정확도만 통과 + 효율성 2개통과코드

from bisect import bisect_left
def solution(n, k, cmd):
    N = n

    data = [i for i in range(n)]

    # 삭제된 인덱스들을 넣어놓을 스택
    rm_stack = []

    for order in cmd:
        #print(k, data)

        # C나 Z
        if len(order) == 1:
            #삭제
            if order == 'C':
                num = data.pop(k)
                rm_stack.append(num) # 인덱스와 값을 저장
                if k == len(data):
                    k -= 1
            # 복원
            else:
                q = rm_stack.pop()
                idx = bisect_left(data, q)
                if q < data[k]:
                    k += 1
                data.insert(idx,q)

        else:
            do, num = order.split()
            num = int(num)
            # 아래로이동 -> K를 증가
            if do == 'D':
                k += num

            # 위로이동 -> K를 감소
            else:
                k -= num

    #print(k, data)

    answer = ['O'] * N
    for i in rm_stack:
        answer[i] = 'X'

    #print(answer)
    return ''.join(answer)