본문 바로가기
✨ Club/EDOC 프로그래밍 동아리 | Algorithm

EDOC 1-2 2회차

by 정람지 2022. 9. 21.

<백준 5397번 키로거>

from sys import stdin
N = int(stdin.readline())

for _ in range(N):
    sList = list(stdin.readline())[0:-1]
    reList= ["0" for _ in range(len(sList))]
    i = 0 # 마우스 위치

    for K in range(len(sList)): 
        if sList[K] == "<" : # 커서 움직임
            if i == 0:
                pass
            else:
                i -= 1
                
        elif  sList[K] == ">":
            i += 1
            
        elif sList[K] == "-": # 빼기
            if i == 0:
                pass
                
            else:
                reList[i-1] = '0'
                
        else: # 문자
            if reList[i] != 0: # 문자가 있는 상태
                for w in range(len(sList)-i):
                    reList[len(sList)-1-w] = reList[len(sList)-2-w]
                reList[i] = sList[K]

                # reList.insert(i,sList[K])
                i += 1
                

    result = ""
    for cha in reList:
        if cha != '0':
            result += cha
    print(result)

50 퍼센트에서 시간초과가 난다.

insert 시간복잡도가 O nlogn 이라길래 한번 포문으로 바꿔봤는데 다를 건 없었던 것 같다ㅎㅎ

 

문자 하나씩 넣는 거 split map 안 써도 된다는 거 자꾸 까먹는다..

sList = list(stdin.readline())[0:-1]

(\n 유의)

sys.stdin.readline() 은 input() 이다..!.!.!

 

스택을 써야 하는 것 같다.

 

[백준] 5397번 키로거 파이썬 풀이

난이도: 중 풀이시간: 40분 분류: 스택, 배열, 시뮬레이션, 링크드 리스트 링크: [link]

assaeunji.github.io

리스트명.pop()

을 하면 (괄호안에 아무것도 안 쓰면) 맨 마지막 값 반환!

from sys import stdin
N = int(stdin.readline())
    
for _ in range(N):
    sList = list(stdin.readline())[0:-1]
    left = []
    right = []

    for cha in sList:
        if cha == ">":
            if right: # 있으면 True니까...!
                A = right.pop()
                left.append(A) 
        elif cha == "<":
            if left:
                A = left.pop()
                right.append(A)
        elif cha =="-":
            if left:
                left.pop()
        else:
            left.append(cha)

    print("".join(left)+"".join(reversed(right))) # right은 거꾸로 받아야 함/리스트 합칠때는 join 쓰기!

저번에 체육복 문제 풀었으니까 한개만 올려도 되겟지


푼 문제 코드와 사진을 이독 레퍼지토리에 올려야 하는데

비주얼 스튜디오 코드와 깃을 연동하고 싶다.

터미널창은 넘 어렵.. 여기서 오류가 하도 많이 나서..

또 뭘 잘못했는지 컴퓨터의 사진이랑 문서들이 증발했다..

 

비주얼스튜디오에서 보니까 근데 10000개의 문서가 올라와 있길래.. git init . 명령어 써서 그런가? 해결할 방법을 찾아봐야겠다..


이제는 리스트와 내 딱딱한 머리로만 문제를 상대하는 데에 한계가 느껴지는 것 같다.

그래서 알고리즘과 시간복잡도, 다양한 기능 사용을 위해서 doit 알고리즘 코딩테스트 책을 샀다. 

자꾸 책을 사들이는 버릇이 생겼는데 

책은요, 읽을 책을 사는 게 아니고 산 책 중에 읽는 거예요
-김영하

아하! 그렇군요! 

책상에 5권의 읽는 중인 책이 있지만 굿~