본문 바로가기

자료구조14

[ 파이썬(python) ] 백준 17952 - 과제는 끝나지 않아! 📍 백준 17952 - 과제는 끝나지 않아! 문제: 백준 17952 - 과제는 끝나지 않아! 💡 나의 풀이 flag[0]이 0인 경우와 1인 경우로 나누어 작성했다. flag[0]가 0일 때 stack이 존재하면 맨 뒤에부터 시간을 확인하여 0인 경우에는 score에 추가하고 0이 아닌경우에는 시간이 흐르게 -= 1을 해준다. flag[0]가 1이면, 과제를 받자마자 시작하기 때문에 -1을 해준 상태로 넣는다. 그런데 이런 방법으로 풀지 않더라도 다른 코드를 보니까 코드를 반절로 줄일 수 있었다. 바로 시간과 점수 변수를 각각 선언하고 계산하는 방식이다. flag[0]이 1인 경우만 고려한다 만약, flag[0]이 1이라면 score와 time에 각각 해당 값을 넣는다. time에 값이 남으면 time .. 2021. 7. 12.
[ 파이썬(python) ] 백준 20001 - 고무오리 디버깅 📍 백준 20001 - 고무오리 디버깅 문제: 백준 20001 - 고무오리 디버깅 💡 나의 풀이 고무오리를 이용해서 푸는 귀여운 문제다. 그런데 입력이 숫자가 아닌 문자여서 입력 횟수가 많으면 어쩌지(?)라는 생각을 잠깐 했으나 python으로 실행시간이 72m/s인것으로 보아 많지 않은 것 같다.(문제에 입력 범위는 따로 명시되어있지 않았다.) 주의할 점은 stack이 없는 경우에 고무오리가 들어오면 두 문제를 추가해야 한다. stack = [] while True: s = input() if s == '문제': stack.append(1) elif s == '고무오리': if not stack: stack.append(1) stack.append(1) else: stack.pop() elif s ==.. 2021. 7. 12.
[ 파이썬(python) ] 백준 2493 - 탑 📍 백준 2493 - 탑 문제: 백준 2493 - 탑 💡 나의 풀이 스택을 활용하면 되는 문제인데 머릿속으로는 단계별로 생각이 잘 됐는데 코드로 구현하려니까 쉽지 않았다. 우선 범위가 500,000이기 때문에 이중 반복문을 사용하면 최대 250,000,000,000까지임을 명심해야 한다. 여기서 의문점은 성공코드와 실패 코드의 시간 복잡도의 차이는 (index, slicing)의 차이인것 같은데 왜 시간초과가 나는지 잘 모르겠다.(고수님들 댓글부탁드립니다 :)) --- [ 21. 7. 13. ] 백준에 시간초과 관련하여 질문을 남겼는데 @djm03178님께서 좋은 답변을 해주셨다. 결론적으로 시간복잡도는 다음과 같다. 1. 성공코드(O(N)): 각 원소가 스택에 들어가고 나오는 연산이 한 번씩만 수행된다.. 2021. 7. 9.
[ 파이썬(python) ] 백준 2504 - 괄호의 값 📍 백준 2504 - 괄호의 값 문제: 백준 2504 - 괄호의 값 💡 나의 풀이 stack에 값을 넣고 순서를 잘 알았더라면 금방 풀 수 있을 텐데, 나한테는 어려웠던 문제였다. 전체적인 흐름은 다음과 같다. 괄호열이 올바른지 올바르지 않은지 검사한다.(def is_checked) 괄호열이 올바르면 def calc_value 함수로 이동하고 괄호열이 올바르지 않다면 print(0)을 출력한다. 이어서 세부적인 흐름을 살펴보자. is_check()는 단순히 올바른지 아닌지만 확인하면 되기때문에 큰 어려움은 없었으나, calc_value() 함수에서 상당히 애를 먹었다. 어떻게 해결했는지 차근차근 살펴보자. 여는 괄호((, [)면 stack에 집어넣는다. 닫는 괄호가 나올때 )의 경우와 ]의 경우를 나눈다.. 2021. 7. 7.
[ 파이썬(python) ] 백준 3986 - 좋은 단어 📍 백준 3986 - 좋은 단어 문제: 백준 3986 - 좋은 단어 💡 나의 풀이 어떤 방식으로 풀어야 할지 고민하다 stack으로 풀었는데 정답판정을 받았다. 문제에서 아치형 곡선으로 만나야 한다고 나와있는데 괄호 쌍맞추는 문제처럼 stack에 들어오는 현재 값과 이전에 있던 stack[-1]과 비교해서 같으면 pop() 다르면 s[i]를 추가하는 방법으로 풀면 된다. 맨 처음 stack이 없을 때 값을 어떻게 넣지??라고 생각하다 stack에 값이 있을 때, 없을 때로 나눠서 조건을 작성했다. 여기서 나의코드와 다른 사람 코드의 차이점은 13 ~ 19번 인데, stack 조건을 and로 합치고 아닌 경우에는 append를 줘도 같은 결과가 나왔길래 가져왔다. 다음 사진은 예제 입력 1을 손으로 그리면.. 2021. 7. 6.