[백준] 1406-에디터

kiteday·2025년 7월 10일
0

코딩테스트

목록 보기
8/46

문제바로가기

n = input()
m = int(input())
c = len(n)

for i in range(m):
    order, *word = input().split()
    if order == 'L':
        if c>0:
            c -= 1
    elif (order == 'P') :
        n = n[:c]+word[0]+n[c:]
        c+=1
    elif order == 'D':
        if c<len(n):
            c += 1
    elif order == 'B':
        if c > 0:
            n = n[:c-1]+n[c:]
            c-=1
    else:
        pass
        
print(n)

각 버튼에 따른 분기로 코드를 작성해주면 된다.
근데 위에 코드처럼 하면 시간초과(무조건)가 뜬다.
왜냐면 파이썬은 immutable한 언어여서 슬라이싱한다고 잘린 부분이 사라지는 것이 아니기 때문.

게시판에서 나랑 같은 방식으로 짠 분이 질문을 올렸는데 댓글에 커서를 두고 좌우로 나눠보라고 해서 다시 짰다.

n = input()
m = int(input())
c = len(n)
left=list(n)
right=[]

for i in range(m):
    order, *word = input().split()
    if order == 'L':
        if left:
            right.append(left.pop())
    elif (order == 'P') :
        left.append(word[0])
    elif order == 'D':
        if right:
            left.append(right.pop())
    elif order == 'B':
        if left:
            left.pop()
    else:
        pass

print(''.join(left + right[::-1]))

실수한 부분은 직관적으로 right는 맨 왼쪽(맨 앞 숫자)을 pop해야 되는거 아냐?? 라고 생각해서 잘못 코딩 했고,
위의 사고의 연장으로 마지막 print에서도 그냥 단순하게 left+right로 밀어버렸다..ㅎㅎ
프린트 찍어보고 잘못된 걸 알고 수정했는데 이런 디테일이 전반적인 알고리즘을 짜는 것보다 늘 더 어렵다.

이와중에 여전히 python으로 하면 시간초과가 나는 ㅠ
거기까지는 시간낭비일듯싶어 pass.

profile
공부

0개의 댓글