본문 바로가기

스터디 1일 1커밋

240225 [swea] 1234. 비밀번호

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV14_DEKAJcCFAYD&categoryId=AV14_DEKAJcCFAYD&categoryType=CODE&problemTitle=&orderBy=PASS_RATE&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=2

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


나의 코드

스택 사용

for t in range(10):
    N, data = input().split()

    # data_list = list(map(int, data))

    stack = []
    for i in data:
        if len(stack) == 0 or stack[-1] != i:
            stack.append(i)
        else:
            stack.pop()
    
    print(f'#{t+1}', ''.join(stack))

 

 


실패 - 이전의 값과 비교하면서 같을 때 제거하는 형식

def remove(arr, length):
    for i in range(1, length):
        if arr[i-1] == arr[i]:
            arr.remove(arr[i-1])
            arr.remove(arr[i-1])
            print(arr)
            length = length - 2
            remove(arr, length)
            break               # 이걸 추가하면 인덱스에러 해결
    return arr

for t in range(10):
    N , data = input().split()

    data_list = list(map(int, data))

    print(remove(data_list, int(N)))

원하는 방식으로 리스트는 추출했으나 인덱스에러가 나면서 다음번의 데이터를 못가져온다.

(+break를 추가하면서 인덱스에러는 해결, 하지만 같은 값이지만 연속하는 수가 아닌 것도 제거하는 문제 발생, 왜인지는 모름) 


처음에 리스트에 넣고 이전의 숫자와 같으면 이전의 숫자와 지금의 숫자 두 개를 한번에 삭제하는 방식으로 함수를 짰고 그게 계속 반복되는 상황에 그 함수를 계속 쓰게 하려고 재귀함수로 구현을 해보려고 했다. 제거하는 과정에서 출력을 해보니 내 생각대로 제거는 되었지만 어디선가 인덱스 에러가 나서 열 개의 데이터를 다 보지는 못했다.

그래서 두 번째 방법을 스택의 방법으로 써서 해결했다. 첫번째 방법에서 썼던 data_list는 출력에 join함수를 쓰려면 문자여야 돼서 쓰지 않았다. 스택의 개념은 알지만 아직 문제를 읽으며 스택을 써야하는지 구분은 잘 못하는 것 같다.