분류 전체보기


문제유형동적 계획법풀이 방법 도출 과정1. 주어진 수열 A에서 가장 긴 증가하는 부분 수열의 길이를 구하는 문제이다.2. 모든 부분 수열을 생성한 뒤, 각 부분 수열이 증가하는지 확인하여 최대 길이를 찾는 방식도 생각할 수 있다. 그러나 수열의 길이가 최대 1000인 경우 가능한 부분 수열의 수가 기하급수적으로 증가하여(실제로는 2^N에 가까운 복잡도를 가진다.) 실행 시간이 매우 비련실적이게 된다. 3. 단순 그리디 알고리즘을 사용한다고 하더라도 매 순간 가장 좋아보이는 선택을 하더라도 전체 최적해를 보장할 수 없으므로 이 문제에는 적합하지 않다. 4. 위 두가장 방법의 한계를 고려할 때, 작은 부분 문제로 나누어 그 결과를 재활용하는 동적 계획법이 적합한 해결이다.이를 위해 먼저 문제를 재귀적인 관점..


문제 해석블랙잭 게임인데 M(주어진 수)에 3장을 뽑아서 그들을 더한 수가 M과 같거나 작은 수로 만들어 그 값을 산출하는 것과 같다. 그렇게 하기 위해서 다양한 것을 생각할 수 있다. 문제 풀이 전략1. 브루트 포스 (Brute Force) 접근법가장 직관적인 방법은 가능한 모든 카드 3장의 조합을 생성하여, 각 조합의 합이 M 이하인지 확인한 후, 그 중 최댓값을 찾는 것이 있다. 이것의 장점은 구현이 간단하고 문제의 조건(카드의 수 n이 상대적으로 작을 때)에서는 충분히 빠르게 동작한다는 점에 있다. 하지만 이것의 단점은 전체 조합의 수는 nC3으로 n이 커지면 시간 복잡도가 급격하게 증가한다는 것이다. 에를 들어 n이 100이라면 약 161,700가지 조합을 확인하게 되지만 n이 1000이..


문제유형수학풀이 방법 도출 과정1. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구하는 것이 문제 - i-1과 i+1 과 i는 각각 색이 같으면 안됨3. 각 비용이 낮은 것을 찾으면 됨 단, 이동하면서 칠하기 때문에 잘생각해야함4. 만약 이렇게 있을 경우5.26 40 8349 60 5713 89 99 1) 26 2) 57 3) 13이렇게 해서 96이렇게 구해나가면 된다.6. 이 문제는 현재 집을 칠하는 비용을 이전 집들의 최소 비용과 연계하여 계산해야 하므로, 재귀 함수를 활용한 해결이 가능하다. 즉, 집 i를 칠하는 비용은 i-1번째 집까지의 최소 비용을 고려한 결과로 나타낼 수 있다. 이를 통해, 각 집을 칠하는 최소 비용..


문제유형수학, 해쉬풀이 방법 도출 과정1. 해쉬함수: 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수 2. 이러한 해쉬 함수는 저장과 탐색에 쓰인다. 3. 영어에는 총 26개의 알파벳이 존재하므로 a에는 1, b에는 2, c에는 3, ..., z에는 26으로 고유한 번호를 부여할 수 있다. 결과적으로 우리는 하나의 문자열을 수열로 변환할 수 있다.4. 예를 들어서 문자열 "abba"은 수열 1, 2, 2, 1로 나타낼 수 있다. 하지만 이렇게 하면 꼬이는 게 존재한다. 모두가 겹치지 않도록 만들어야한다. 5. 할 일은 위 식을 통해 주어진 문자열의 해시 값을 계산하는 것 6. 힌트 zzz의 해시 값은 26 x 31^0 + 25 x 31^1 + 26 x 31^2 = 25818 7. 가장 먼..


문제유형그리디 알고리즘풀이 방법 도출 과정1. 준규의 이동 경로는 오른쪽, 아래, 대각선 오른쪽 아래로 제한되어 있으므로, 각 위치에서 도달할 수 있는 최대 사탕 개수를 저장하는 DP 테이블을 구상할 수 있다. 2. 구체적으로 각 위치 (r, c)의 값은 이전에 도달할 수 있는 세 위치 (r + 1, c), (r, c + 1), (r + 1, c +1) 중 최대값에 현재 위치의 사탕 수를 더한 값으로 갱신된다.3. DP 테이블을 구성할 때, 아직 방문하지 않은 위치의 값은 0으로 초기화한다. "단, 가장 먼저 숫자가 0인 숫자는 최소화해야한다."라는 표현은 초기 상태나 경로 선택 시 0의 영향을 최소화해야 한다는 의미로 해석할 수 있으며, 이 경우 DP 테이블 초기화 및 경계 처리에 주의한다.4. 모든 ..


문제유형그리디 알고리즘풀이 방법 도출 과정1. 이동 횟수 계산- 한 번에 M권의 책을 옮길 수 있으므로, 책들을 배치할 때 N//M번은 배치 후 0으로 돌아와야한다.- 마지막 배치에서는 복귀할 필요가 없으므로, 복귀 거리를 제외할 수 있다.2. 거리 최적화- 한 번에 옳길 책은 서로 가까운 위치에 있는 것이 이동 거리를 줄이는 데 유리하다.- 따라서 책의 좌표를 정렬(sort)하여, 가까운 위치부터 묶어 처리할 수 있도록 한다.3. 알고리즘 선택- 위 전략은 각 이동 시 최적의 선택을 하는 그리디 알고리즘에 기반한다. - 매 이동마다 가장 먼 지점까지 이동한 후, M권의 책을 배치하고(마지막 배치 제외 시 복귀 생략) 복귀하는 방식으로 전체 걸음 수를 최소화할 수 있다. 시간 복잡도시간 복잡도는 입력에서..


문제유형조합 알고리즘풀이 방법 도출 과정1. 브루트 포스를 사용해서 푼다. 모든 3개의 조합을 만들고 그것의 값이 M의 값 이하인 것 중 가장 크기가 큰 것을 찾아 보여주는 방식으로 하도록 하겠다.시간 복잡도시간 복잡도는 모두 O(nC3)이다. 하지만 최악의 경우가 100이기 때문에 1억번이 넘지 않아 시간복잡도는 괜찮다. 코드 및 간단설명조합을 사용해서 문제를 풀었다.from itertools import combinationsN, M = map(int, input().split())lst = list(map(int, input().split()))result = []for num in combinations(lst, 3): if sum(num) 다른 풀이1) 투 포인터(two pointer) 기..


문제유형그리디 알고리즘풀이 방법 도출 과정1. 가장 최적의 해 = 가장 빠른 순서대로 이기에 적합한 문제이다.2. 이러한 것은 그리디 알고리즘을 사용하면 적합하다. 3. 우선 순위는 가장 많은 동전이여야한다는 점을 기억하며 코드를 작성해보도록 하겠다. 시간 복잡도시간 복잡도는 O(1)이다. 그리디 알고리즘을 사용했기 때문이다. 코드 및 간단설명그리디 알고리즘을 사용하여 간단하게 풀었다. N = int(input())N = 1000 - Ncount = 0for coin in [500, 100, 50, 10, 5, 1]: count += N // coin N %= coinprint(count)다른 풀이1) math함수 사용divmod를 사용하여 몫과 나머지를 같이 계산하는 방법으로 더 효율적으로 ..


문제유형빈도수 배열 활용풀이 방법 도출 과정1. 마크에서 땅 고르기 작업을 해야한다. 2. 좌표 (i, j)에서 블록을 제거하거나 추가해야 한다.- 블록을 제거하는 데는 2초가 걸리며- 블록을 추가하는 데는 1초가 걸린다. 3. 밤에는 무서운 몬스터가 나오기 때문에, 가능한 한 빨리 작업을 끝내야 한다.4. 땅 고르기 작업에 걸리는 최소 시간과 그 경우의 땅 높이를 출력해야 한다. 5. 이 문제는 빈도수 배열을 이용한 브루트 포스를 사용해서 풀어야 한다.6. 가장 먼저 빈도수 배열을 생성한다.7. 모든 가능한 목표 높이에 대한 시뮬레이션을 한다.8. 인벤토리 조건 확인 및 최적 해를 선택한다. 시간 복잡도시간 복잡도는 모두 O(n x m)이다. 하지만 n과 m을 500에서 257로 줄여 시간복잡도를 절반..


문제유형수학풀이 방법 도출 과정1.수학적으로 생각해보자 1의 주변에는 6개가 있다. 이것은 2~7까지의 수인데 1에서 건너 뛰려면 1칸이 소요되는 얘이다.2. 다음 1~7주변의 것을 보자 8~19까지 있다. 이것은 12개이다. 그 다음 주변을 보자. 20 ~ 37까지 있다. 이것은 18개이다.3. 규칙이 나왔다. 칸을 나갈 수록 카운트가 6 12 18 이 된다. 4. 이것을 통해 값을 구하도록 하겠다. 시간 복잡도시간 복잡도는 모두 O(n)이다. 코드 및 간단설명사칙연산을 활용한 문제이다.n = int(input())layer = 1current_max = 1while n > current_max: current_max += 6 * layer layer += 1print(layer)다른 풀이1..


문제유형브루드 포스풀이 방법 도출 과정1. 탐색을 하는데 완전탐색을 하는 방법으로 문제를 풀어보도록 하겠다. 2. 값 중 제시한 값이 들어있는지 확인하는 것이 목표.3. 이대로 코드를 작성해보도록 하겠다. 시간 복잡도시간 복잡도는 브루드 포스 방법을 사용했기에 O(n)이다. 최악의 경우 n은 1000이기에 시간제한에 충족하여 시간복잡도는 괜찮다.코드 및 간단설명사칙연산을 활용한 문제이다.n, k = map(int, input().split())lst = list(map(int, input().split()))ans = 0for i in range(n): if lst[i] == k: ans += 1print(ans)다른 풀이1) count함수 사용더욱 간단한 방법은 count함수를 사용..


문제유형백트래킹, 제귀함수풀이 방법 도출 과정1. 예로 들어 aaabbbaaa는 같은 문자열이 오는 경우가 있어 행운의 문자열이 아니다.2. 그런데 이 문자열들을 순열로 하여 섞어 행운의 문자열을 찾는 것이 문제이다. 3. 문자열의 모든 가능한 순열을 생성하고 그 문자가 행운의 문자열인지 알아내는 코드를 작성해보도록 하겠다.시간 복잡도시간 복잡도는 모든 순열의 수 N! X 각 순열을 생성하는 데 걸리는 시간 N을 곱한 정도가 된다. 최악의 경우 10! X 10정도는 3600만이므로 1초 이내에는 계산이 가능하다. 코드 및 간단설명백트래킹과 재귀함수를 활용하여 문제를 해결하였다. def func(lev): global S, chars, cnt, choose, ans # base case ..


문제유형조합 알고리즘풀이 방법 도출 과정1. 부분수열은 주어진 원소 중 일부를 선택하는 조합과 동일한 개념 이기에 조합을 사용해보도록 하겠다. 2. 조합을 사용하여 모든 수를 만들고 그 다음에 값들을 더한다음 첫째 줄에 합이 S가 되는 수를 찾는다.시간 복잡도최악의 경우 N이 20이기 떄문에 20 X 2^20= 2천만 정도 된다. O(N 2^N)코드 및 간단설명조합을 사용하여 풀었더니 시간초과가 나지 않았다. from itertools import combinationsN, S = map(int, input().split())lst = list(map(int, input().split()))ans = 0for i in range(1, N + 1): for num in combinations(lst, i..


문제유형사칙연산풀이 방법 도출 과정1. 기본적인 사칙연산을 이용하여 주문 수량을 계산할 수 있다.2. 티셔츠의 경우, 각 사이즈별 참가자 수를 고려하여 필요한 묶음 수를 계산한 후 주문 가능한 단위에 맞춰 조정한다3. 펜은 묶음 단위 P자루씩 주문하거나, 부족한 경우 개별 주문을 통해 참가자 수와 정확히 맞춘다.4. 예외도 생각시간 복잡도시간 복잡도는 모두 O(1)이다. 코드 및 간단설명사칙연산을 활용한 문제이다.N = int(input())lst = list(map(int, input().split())) T, P = map(int, input().split())A = 0for i in range(6): if lst[i] % T == 0: A += lst[i] // T else: A +=..


문제유형브루드 포스 알고리즘풀이 방법 도출 과정1. 영수, 민혁이 1~9까지 3개를 마음속으로 생각한다. 2. 민혁이는 그 3개를 말한다. 만약 하나가 영수의 세자리수의 동일한 자리에 위치하면 스트라이크3. 숫자가 영수의 세 자리 수에 있긴 하나 다른 자리에 위치하면 볼4. 몇 스트라이크 몇 볼이라고 영수는 말해준다.5. 입력을 바탕으로 영수가 생각하고 있을 가능성이 있는 수가 총 몇 개인지를 알아맞춰야한다.6. 물어보는 수는 최대 100개이므로 모든 경우의 수에서 삭제하는 방법으로 브로트 포스 알고리즘을 사용하는 풀이를 사용해보도록 하겠다.시간 복잡도최악의 경우 100 X 10P3 = 7200 이다. 그러므로 시간복잡도 측면에서 문제될 것은 없다. 코드 및 간단설명브루트포스 알고리즘을 사용해보았다...


문제유형정렬 알고리즘풀이 방법 도출 과정1. dict을 사용해서 매핑하고 최종 순위를 계산한 다음 그 순서에 따라 정렬하고2. 3위이외에는 제거한 다음 결과를 출력하는 방법을 사용하도록 하겠다.3. 그리고 세 종목 순위의 합산 점수가 낮은 선수가 이기는 것으로 하고 만약에 합산 점수도 같으면 등번호가 낮은 선수가 이긴다.시간 복잡도n번 나오는데 sorted함수가 사용되기 때문에 시간복잡도는 O(nlogn)이 된다. 가장 최악의 경우 n이 100인 경우이므로 100x7정도가 될 예정이다. 그러므로 시간복잡도 부분에서 걱정할 부분은 없다.코드 및 간단설명sorted함수의 key의 값을 사용하여 문제를 해결하였다.n = int(input()) infos = [list(map(int, input().split(..


문제유형정렬 알고리즘풀이 방법 도출 과정1. 정렬 알고리즘에 key 매개변수를 활용하도록 하겠다. 시간 복잡도입력은 각각 100,000개 가능 정렬 알고리즘은 NlogN이기 때문에 100000 x log100000(17) = 170만번정도 1억번에는 미치지 않는다. 이것이 2번을 하고 있기 때문에 340만번이다. 시간복잡도는 O(NlogN)정도로 생각하면 된다. 코드 및 간단설명매개 변수 key값을 사용해보았다.N = int(input())lst = [list(map(int, input().split())) for _ in range(N)]# 첫 번째 요소(lst[0])를 기준으로 정렬하고, 첫 번째 요소가 같다면 두 번째 요소(lst[1])로 정렬sorted_lst = sorted(lst, key=la..


문제유형순열 알고리즘풀이 방법 도출 과정1. 순열 알고리즘을 구현하는 것이 목표시간 복잡도최악의 순간을 생각하면 8!이기 때문에 이정도면 1억 번은 넘기지 않는 수이다. 코드 및 간단설명순열 알고리즘을 구현해보았다.N = int(input())lst = []for i in range(1, N + 1): lst.append(i)choose = []check = [False] * Ndef permutation(level): if level == N: print(*choose) return for i in range(0, N): if check[i] == True: continue choose.appen..


문제유형조합 알고리즘풀이 방법 도출 과정1. 조합을 물어보는 문제로 조합 알고리즘을 사용하면된다.2. 하지만 모음 조합 1개, 자음 조합 2개를 사용해서 새로운 것을 만드는 것이기에 모음, 자음을 분리하는 것이 필요하다.3. 또한 모음 자음을 분리했으면 이를 서로 조합해야한다.4. 이를 토대로 코드를 작성해보도록 하겠다.시간 복잡도가장 최악을 구하자면 조합의 수는 O(15 choose 14)이고, 각 조합에 대해 O(14)만큼 처리하는 것이므로 O(15 choose 14 * 14)이다. 이것은 시간 복잡도가 시간에 비해 충분하다는 것을 보여준다.코드 및 간단설명combinations 함수를 사용하여 문제를 풀었다. from itertools import combinations# 모음 리스트vowels ..


문제유형조합풀이 방법 도출 과정1. 조합 알고리즘을 구현하는 것이 목표2. 이 방법대로 구현해보도록 하겠다.시간 복잡도시간 복잡도는 최악의 경우 k가 13이므로 13C6의 결과는 O(1)이다.코드 및 간단설명재귀함수를 사용하여 문제를 풀었다. 이건 간단히 조합을 구현하면 되는 문제였다. first_case = True # 첫 번째 테스트 케이스 여부 체크while True: lst = list(map(int, input().split())) N = lst.pop(0) # 첫 번째 값을 N으로 설정 if N == 0: # 종료 조건 break if not first_case: print() # 테스트 케이스 구분을 위해 빈 줄 출력 firs..


주제: 막 구조는 선택적 투과성을 초래한다.생물막은 개별 분자의 특성을 넘어서는 특성을 가지며, 그 중 가장 중요한 특성 중 하나가 선택적 투과성(selective permeability)이다. 선택적 투과성은 세포막을 통과할 수 있는 물질을 제한하며, 세포가 외부 환경과 물질을 교환할 때 필수적인 역할을 한다. 세포는 필요한 물질(예: 영양소, O₂)을 선택적으로 흡수하고, 불필요한 물질(예: 대사 폐기물, CO₂)은 배출합니다. 또한, 세포는 Na⁺, K⁺, Ca²⁺, Cl⁻ 등의 무기 이온 농도를 조절하여 내부 환경을 유지한다. 이 포스터에서는 생물막의 선택적 투과성에 대해 살펴보도록 하겠다. 1. 지질 이중층의 투과성(The Permeability of the Lipid Bilayer) 비극성 분..


문제유형재귀 함수풀이 방법 도출 과정1. 3^N 개가 있는 문자열을 만든다.2. 문자열을 3등분 한 뒤 가운데 문자열을 공백으로 바꾼다.3. 나머지 2개를 3등분하고 가운데를 공백으로 바꾼다.4. 모든 선의 길이가 1이면 멈춘다.5. 이걸 출력하는 프로그램을 만들면 된다.6. 이걸 재귀함수로 만들어보도록 하겠다. 시간 복잡도각 단계에서 N만큼의 문자열 결합 연산이 발생.재귀적으로 N/3 크기의 문제를 두 번 호출.즉, O(N/3)이 시간복잡도 코드 및 간단설명재귀함수를 사용하여 문제를 풀었다. def line_one(N): if N == 1: return '-' prev = line_one(N // 3) space = ' ' * (N // 3) return..


문제유형재귀 함수풀이 방법 도출 과정1. 피보나치 수는 n = (n-1) + (n+1)의 형태를 띄고 있다. 2. 이런 경우 재귀함수를 쓰게 되면 간단하게 풀수가 있을 것이다.3. 이를 이용하여 문제를 풀어보도록 하겠다. 시간 복잡도입력 받기 O(1)재귀함수 O(2^n)총 O(2^n)이 시간 복잡도이다코드 및 간단설명재귀함수를 사용하여 문제를 풀었다. def ponachi_num(n): if n == 0: return 0 if n == 1: return 1 return ponachi_num(n-1) + ponachi_num(n-2)n = int(input())print(ponachi_num(n))다른 풀이1) 메모이제이션을 사용하는 재귀 구현 메모이제이션은 이미 ..


문제유형스택풀이 방법 도출 과정1. 스택의 연산을 활용하여 1~n까지의 수에 대해서 주어진 순서대로 만드는 것이 목표2. 만약 4, 3, 6, 8, 7, 5, 2, 1의 수열을 만든다고 할 때 다음과 같이 하면된다.1234 ++++123 - 12 -1256 ++125 -12578 ++1257 -123 -12 -1 --이런 방식으로 만들면 된다.3. 하지만 NO가 되는 경우는 이렇다. 만약 1, 2, 5, 3, 4인 경우1 +-2 +-345 +++34 -????34가 필요한데 43으로 밖에 꺼내지 못하므로 이런 경우는 NO라고 하는 것이다. 4. 이러한 점을 보았을 때, 스택에 넣을 게 없을 때 NO라고 하는 듯하다.5. 이점을 이용해서 코드를 작성해보도록 하겠다.시간 복잡도입력 처리: O(N)whlie..


문제유형이분 탐색풀이 방법 도출 과정1. 어떤 수를 찾아내는 것이기 때문에 탐색 알고리즘을 쓰면 된다. 그중 이분 탐색을 쓰겠다.2. left, right를 설정하고 mid는 right - left 의 절반값을 쓰면된다.3. 이제 이분 탐색법을 사용하여 문제를 풀면 된다. 시간 복잡도입력 처리: O(N)정렬: O(N log N)M번 이진 탐색 실행 O(M log N) 최종 시간 복잡도O(N log N + M log N)코드 및 간단설명이분탐색을 사용하여 문제를 풀었다.import sysinput = sys.stdin.readlineN = int(input())A = list(map(int, input().split()))A.sort()M = int(input())B = list(map(int, input..


문제유형이분 탐색풀이 방법 도출 과정1. 이 문제는 단순한 구현 문제처럼 보일 수 있지만, 이를 구현하는 방식에 따라 시간 복잡도가 커질 수 있다. 2. 따라서, 문제를 해결할 수 있는 더 효율적인 방법을 찾아야 한다. 이를 위해 이분 탐색을 활용하는 방식으로 접근하려 한다. 3. 이분 탐색을 적용하기 위해, 첫 번째로 left를 1로 설정하고, right는 주어진 랜선들의 길이 중에서 가장 긴 값으로 설정한다. 이렇게 설정하는 이유는 랜선 길이가 1부터 가장 긴 값까지 범위 안에 존재하기 때문이다. 3. 그 다음, 중간값인 mid를 계산한다. 그리고 mid 길이로 랜선을 나누었을 때, 얻을 수 있는 랜선의 개수가 주어진 N개 이상이 되는지 확인한다. 이 조건을 만족하는지 여부에 따라 이분 탐색을 반복하..


문제유형구현, 수학, 시간복잡도풀이 방법 도출 과정1. 문제를 보고 간단하게 값들을 리스트하고 파이썬 내장함수를 사용하고자 함.2. 하지만 이 방법으로 풀었을 시 시간초과가 발생, 이것은 시간복잡도의 문제임3. 가장 먼저 첫번째 받는 값을 이미 만들어진 인덱스값을 사용하도록 한다. 이건 for문을 사용하지 않는 방법이다.4. 첫번째를 제외한 N번째 수의 경우 입력을 받고 저장한 다음에 그 내용을 보여주는 것이 아닌 입력을 받으면서 합계, 최솟값, 최댓값, 빈도수를 동시에 계산하기 위한 방법을 사용한다.5. 산술 평균은 모든 수의 합을 total에 누적시키며, 마지막에 total / N을 구하여 계산합니다. 입력받을 때마다 total을 갱신하고, 결과적으로 전체 합을 구할 수 있다.6. 중앙값은 오름차순으..


문제유형그리디 알고리즘풀이 방법 도출 과정1. 3킬로, 5킬로만 담을 수 있는 봉지가 있다. 주어진 킬로로 최소의 봉지수 구하기2.5로 계속해서 나누면서 카운트하는 방식으로 이를 풀어보도록 하겠다. 시간 복잡도시간복잡도는 입력 후 for문이 최대 1번 사용되고 있기 떄문에 O(n)이다. 코드 및 간단설명그리다 알고리즘과 완전 탐색 알고리즘을 사용하여 def min_bags(n): # 5kg 봉지를 최대한 많이 사용 for i in range(n // 5, -1, -1): # 5kg 봉지 개수를 줄여가면서 탐색 remainder = n - (i * 5) # 5kg 봉지를 사용하고 남은 무게 if remainder % 3 == 0: # 나머지가 3으로 나누어 떨어지는..


문제유형스택풀이 방법 도출 과정1. "("는 ")"와 짝꿍 "["는 "]"과 짝궁 이를 맞추지 않고 있다면, no출력 그 반대는 yes출력을 한다. "."는 줄이 끝났다는 신호이다.2. 스택을 활용하면 괄호의 올바른 짝을 쉽게 확인할 수 있음3. 왼쪽 괄호를 만나면 스택에 추가4. 오른쪽 괄호를 만나면 스택에서 짝이 맞는 괄호가 있는지 확인 후 제거. - 짝이 맞지 않으면 no 출력- 짝이 맞지 않거나 스택이 비어있는데 닫는 괄호가 나오면 no 출력5. 모든 문자열을 처리한 후에도 스택에 괄호가 남아 있으면 no 출력- 스택이 비어 있으면 yes 출 시간 복잡도시간복잡도는 for문이 입력되는 순서대로 적용되고 있기에 대략 O(n)로 보여진다. 그리고 for 문의 스택의 연산은 O(1)이다. 그렇기 때문에..