SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
서울시립대 알고리즘 소모임
선형 자료구조
1학기 6주차
강의자 소개
2021 AL林 정기 세미나 2
이름 최문기
소속 서울시립대 컴퓨터과학부(16학번)
핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder)
ICPC 팀 (팀명 미정)
- 김정현, 오규민, 최문기
2021 AL林 정기 세미나 3
자료구조
자료구조(data structure)
2021 AL林 정기 세미나 4
효율적인 접근 및 수정을 가능하게 하는 자료의 집합
(In computer science, a data structure is a data organization,
management, and storage format that enables efficient access
and modification.)
효율적인 알고리즘을 설계하는데에 필요하다.
자료구조(data structure)
2021 AL林 정기 세미나 5
선형 구조(6주차)
- 배열
- 연결 리스트
- 스택, 큐, 덱
비선형 구조(7주차)
- 그래프
- 트리
선형 자료구조
2021 AL林 정기 세미나 6
일렬로 늘어선 자료들을 저장하기 위한 자료구조
- 정적 배열
- 동적 배열
- 연결 리스트
- 스택
- 큐
- 덱
2021 AL林 정기 세미나 7
배열, 연결 리스트
정적 배열
2021 AL林 정기 세미나 8
크기가 고정되어 있으며,
한번 생성한 배열은 크기를 변경하는 것이 불가능
ex) C언어
int array[5];
array[0] array[1] array[2] array[3] array[4]
동적 배열
2021 AL林 정기 세미나 9
크기를 지정하지 않고
동적으로 바꿀 수 있는 배열
파이썬은 list가 기본적으로 동적 배열
연결 리스트(링크드 리스트)
2021 AL林 정기 세미나 10
원소를 저장할 때 다음 원소가 있는 위치를 포함시키는 자료구조
배열 vs 연결 리스트
2021 AL林 정기 세미나 11
배열 연결 리스트
k번째 원소 접근 O(1) O(k)
임의 위치에 원소 추가/제거 O(N) O(1)
배열, 연결 리스트 - 표준 라이브러리 사용
2021 AL林 정기 세미나 12
표준 라이브러리에 구현된 동적 배열과 연결 리스트
자료구조 C++ Java Python
동적 배열 vector ArrayList []
연결 리스트 list LinkedList 없음
2021 AL林 정기 세미나 13
스택, 큐, 덱
스택
2020 AL林 정기 스터디 14
“Last In First Out”
마지막으로 들어간 데이터가
가장 먼저 나오는 자료구조
다음 연산을 O(1)에 수행
push(item): 스택의 가장 위에 원소 추가
pop(): 스택의 가장 위의 원소를 제거
top(): 스택의 가장 위에 있는 원소 확인
empty(): 스택이 비어있는지 확인
큐
2020 AL林 정기 스터디 15
먼저 들어간 데이터가
가장 먼저 나오는 자료구조
다음 연산을 O(1)에 수행
push(item): 큐의 가장 뒤의 원소 추가
pop(): 큐의 가장 앞의 원소 삭제
front(): 큐의 가장 앞에 있는 원소 확인
back(): 큐의 가장 뒤에 있는 원소 확인
empty(): 큐가 비어있는지 확인
“First In First Out”
덱
2020 AL林 정기 스터디 16
스택과 큐를 합친 구조
양쪽에서 push pop이 가능
push
push
pop
pop
스택, 큐, 덱
2020 AL林 정기 스터디 17
push
pop
push pop
push
push
pop
pop
스택
큐
덱
스택, 큐, 덱 - 구현하는 방법
2021 AL林 정기 세미나 18
• 정적 배열로 구현
• 동적 배열로 구현
• 연결 리스트로 구현
• 표준 라이브러리 사용
스택, 큐, 덱 – 표준 라이브러리 사용
2020 AL林 정기 스터디 19
자료구조 C++ Java Python
스택 stack Stack 없음(동적 배열을 사용)
큐 queue LinkedList 없음(덱을 사용)
덱 deque ArrayDeque deque
라이브러리를 씁시다!
2021 AL林 정기 세미나 20
실제로 스택, 큐, 덱을 구현할 일은 거의 없습니다.
다음을 연습합시다!
1. 각각의 자료구조의 성질 이해
2. 본인이 사용하는 언어에서 라이브러리를 쓰는 방법
3. 적절한 자료구조를 사용하여 문제를 해결하는 연습
라이브러리를 쓰는 방법
2021 AL林 정기 세미나 21
다음 문제로 연습해봅시다.
스택 https://www.acmicpc.net/problem/10828
큐 https://www.acmicpc.net/problem/18258
덱 https://www.acmicpc.net/problem/10866
[BOJ 10828] 스택(Python)
2021 AL林 정기 세미나 22
from sys import stdin
input = stdin.readline
# python에서 스택은 list로 구현
stack = []
Q = int(input())
for _ in range(Q):
query = input().split()
# push X: 정수 X를 스택에 넣는 연산이다.
if query[0] == "push":
item = int(query[1])
stack.append(item)
# pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다.
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "pop":
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
# size: 스택에 들어있는 정수의 개수를 출력한다.
if query[0] == "size":
print(len(stack))
# empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
if query[0] == "empty":
if len(stack) == 0:
print(1)
else:
print(0)
# top: 스택의 가장 위에 있는 정수를 출력한다.
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "top":
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
[BOJ 18258] 큐(Python)
2021 AL林 정기 세미나 23
# size: 큐에 들어있는 정수의 개수를 출력한다.
if query[0] == "size":
print(len(queue))
# empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
if query[0] == "empty":
if len(queue) == 0:
print(1)
else:
print(0)
# front: 큐의 가장 앞에 있는 정수를 출력한다.
# 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "front":
if len(queue) == 0:
print(-1)
else:
print(queue[0])
# back: 큐의 가장 뒤에 있는 정수를 출력한다.
# 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "back":
if len(queue) == 0:
print(-1)
else:
print(queue[-1])
from collections import deque
from sys import stdin
input = stdin.readline
# python에서 큐는 collections.deque로 구현
queue = deque([])
Q = int(input())
for _ in range(Q):
query = input().split()
# push X: 정수 X를 큐에 넣는 연산이다.
if query[0] == "push":
item = int(query[1])
queue.append(item)
# pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다.
# 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "pop":
if len(queue) == 0:
print(-1)
else:
print(queue.popleft())
[BOJ 10866] 덱(Python)
2021 AL林 정기 세미나 24
from collections import deque
from sys import stdin
input = stdin.readline
# python에서 덱은 collections.deque로 구현
dq = deque([])
Q = int(input())
for _ in range(Q):
query = input().split()
# push_front X: 정수 X를 덱의 앞에 넣는다.
if query[0] == "push_front":
item = int(query[1])
dq.appendleft(item)
# push_back X: 정수 X를 덱의 뒤에 넣는다.
if query[0] == "push_back":
item = int(query[1])
dq.append(item)
# pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다.
# 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "pop_front":
if len(dq) == 0:
print(-1)
else:
print(dq.popleft())
# pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다.
# 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "pop_back":
if len(dq) == 0:
print(-1)
else:
print(dq.pop())
# size: 덱에 들어있는 정수의 개수를 출력한다.
if query[0] == "size":
print(len(dq))
# empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
if query[0] == "empty":
if len(dq) == 0:
print(1)
else:
print(0)
[BOJ 10866] 덱(Python)
2021 AL林 정기 세미나 25
# front: 덱의 가장 앞에 있는 정수를 출력한다.
# 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "front":
if len(dq) == 0:
print(-1)
else:
print(dq[0])
# back: 덱의 가장 뒤에 있는 정수를 출력한다.
# 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if query[0] == "back":
if len(dq) == 0:
print(-1)
else:
print(dq[-1])
2021 AL林 정기 세미나 26
문제를 풀어봅시다.
[BOJ 9012] 괄호
2021 AL林 정기 세미나 27
YES
( ( ) ( ) ) ( ( ( ) ) )
( ) ( ) ( ) ( ) ( ( ) ( ) ( ) ) ( )
NO
( ( ) ) ( ) )
( ( ( ( ) ( ) ) ( )
( ( ( ) ( ) ( ( ) ) ) ( ( ( ( ) ) ) ) ( )
( ( ) ( ( ( ) ) ( ) (
[BOJ 9012] 괄호
2021 AL林 정기 세미나 28
단순히 괄호의 갯수만 세서 풀면 안됩니다. ex) “ ) ( ”
① NO인 경우
1. ( ( ) ) ( ) ) -> 닫는 괄호에 대해 여는 괄호가 없을 때
2. ( ( ( ( ) ( ) ) ( ) -> 여는 괄호에 대해 닫는 괄호가 없을 때
[BOJ 9012] 괄호
2021 AL林 정기 세미나 29
② 괄호 쌍을 맞추는 방법
1. stack에 여는 괄호를 쌓으면서(push)
2. 닫는 괄호를 만나면 stack에 쌓아놓은 여는 괄호와 매칭합니다.(pop)
따라서
stack으로 괄호 쌍을 맞추면서
NO인 경우를 판별하면 됩니다.
[BOJ 9012] 괄호 - 소스코드
2021 AL林 정기 세미나 30
Q = int(input())
for _ in range(Q):
str = input()
stack = []
answer = 'YES'
# '(' -> push
# ')' -> pop
for c in str:
if c == '(':
stack.append('(')
elif c == ')':
# 1. 닫는 괄호에 대해 여는 괄호가 없을 때 NO
if len(stack) == 0:
answer = 'NO'
else:
stack.pop()
# 2. 여는 괄호에 대해 닫는 괄호가 없을 때 NO
if len(stack) > 0:
answer = 'NO'
print(answer)
[BOJ 2164] 카드2
2021 AL林 정기 세미나 31
[BOJ 2164] 카드2
2021 AL林 정기 세미나 32
그대로 시뮬레이션을 하면 됩니다.
while(카드가 한 장이 아닐 때) {
1. 제일 위에 있는 카드를 버린다.
2. 제일 위에 있는 카드를 제일 아래에 옮긴다.
}
1과 2를 효율적으로 수행할 수 있는 자료구조 : 큐
[BOJ 2164] 카드2 - 소스코드
2021 AL林 정기 세미나 33
from collections import deque
N = int(input())
cards = [i for i in range(1, N + 1)]
queue = deque(cards)
while len(queue) > 1:
# 1. 제일 위에 있는 카드를 버린다.
queue.popleft()
# 2. 제일 위에 있는 카드를 제일 아래에 옮긴다.
x = queue.popleft()
queue.append(x)
print(queue[0])
(참고) 없어도 풀리는데요?
2021 AL林 정기 세미나 34
[BOJ 9012 괄호]는 스택이 없어도 풀립니다.
-> 괄호의 종류가 한 종류이기 때문입니다.
-> 괄호의 종류가 여러개로 늘어나면 스택을 써야합니다.
-> 연습문제: 괄호의 값
[BOJ 2164 카드2]는 큐가 없어도 풀립니다.
-> 규칙성을 잘 찾으면 식 하나로 O(1)에 풀립니다.
-> 이건 오늘 주제와 무관하니 넘어갑시다.
연습문제
2021 AL林 정기 세미나 35
스택, 큐, 덱
기본 문제
10828 스택
18258 큐 2
10866 덱
연습 문제
(문제풀이 스터디 발표)
2504 괄호의 값
1935 후위 표기식2
11866 요세푸스 문제 0
1966 프린터 큐
1021 회전하는 큐
연습문제
2021 AL林 정기 세미나 36
스택, 큐, 덱
도전 문제
1918 후위표기식
5430 AC
3078 좋은 친구
17298 오큰수
3015 오아시스 재결합
2021 AL林 정기 세미나 37
참고
스택, 큐의 응용
2021 AL林 정기 세미나 38
스택과 큐는 컴퓨터과학에서 정말 자주 나옵니다.
• 메모리 관리(Memory management)
• 재귀함수는 스택 메모리를 사용합니다.
• CPU 스케쥴링(CPU task scheduling)
• 인터럽트 핸들링(Handling of interrupt)
• 네트워크 스케쥴링(Network scheduling) 출처: https://dojang.io/mod/page/view.php?id=584
스택, 큐의 응용
2021 AL林 정기 세미나 39
다양한 알고리즘을 구현하는 데에도 필요합니다.
- 그래프 탐색(BFS, DFS)
- 사이클 찾기, 위상정렬, SCC
- 그라함 스캔 등등
직접 구현하기
2021 AL林 정기 세미나 40
보통 학교에서 자료구조 수업을 들으면 이 중 일부를 구현해봅니다.
자료구조 책을 참고하는게 좋을 것 같습니다. 아래는 제가 구글링 해봤습니다
동적 배열
C언어로 구현 : 링크
★ 연결 리스트
C언어로 구현 : 링크
python으로 구현 : 링크
직접 구현하기
2021 AL林 정기 세미나 41
스택
- 정적 배열로 구현: C언어
- 동적 배열로 구현: 동적 배열을 그대로 사용하면 됩니다.
- 연결 리스트로 구현: Python, C언어
큐
- 정적 배열로 구현: C언어, C언어
- 연결 리스트로 구현: Python, C언어
덱
- 정적 배열로 구현: C언어
- 연결 리스트로 구현: Python, C언어
그 외 참고할만한 자료
2021 AL林 정기 세미나 42
kks님 블로그
• https://m.blog.naver.com/kks227/220781402507
• https://m.blog.naver.com/kks227/220781557098
• https://m.blog.naver.com/kks227/220781851401
바킹독님 블로그
• https://blog.encrypted.gg/927?category=773649
• https://blog.encrypted.gg/932?category=773649
• https://blog.encrypted.gg/933?category=773649
• https://blog.encrypted.gg/934?category=773649
• https://blog.encrypted.gg/935?category=773649
• https://blog.encrypted.gg/936?category=773649 (수식의 괄호 쌍)

Más contenido relacionado

La actualidad más candente

쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01Jisu Lee
 
세미나
세미나세미나
세미나Dongyi Kim
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이NAVER D2
 
2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차Moonki Choi
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석jaypi Ko
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석jaypi Ko
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)HYUNJEONG KIM
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론jaypi Ko
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw정완 전
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for testKyunghoon Kim
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)ssusercdf17c
 
머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)ssusercdf17c
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)beom kyun choi
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초jaypi Ko
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 RYoonwhan Lee
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이NAVER D2
 

La actualidad más candente (19)

쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
세미나
세미나세미나
세미나
 
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
[연세대 모르고리즘] 프로그래밍 경진대회 문제 풀이
 
2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
 
[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론[신경망기초] 신경망의시작-퍼셉트론
[신경망기초] 신경망의시작-퍼셉트론
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for test
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)
 
R 기초 II
R 기초 IIR 기초 II
R 기초 II
 
머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
 
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 숭실대 SCCC 프로그래밍 경시대회 문제 풀이
 

Similar a 2021 1학기 정기 세미나 6주차

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
연결리스트 복습 및 스택
연결리스트 복습 및 스택연결리스트 복습 및 스택
연결리스트 복습 및 스택Lee Geonhee
 
Python + Excel
Python + Excel Python + Excel
Python + Excel POSTECH
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2민석 이
 

Similar a 2021 1학기 정기 세미나 6주차 (13)

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
5. queue
5. queue5. queue
5. queue
 
4. stack
4. stack4. stack
4. stack
 
자료구조02
자료구조02자료구조02
자료구조02
 
스도쿠
스도쿠스도쿠
스도쿠
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
2012 Ds 02
2012 Ds 022012 Ds 02
2012 Ds 02
 
연결리스트 복습 및 스택
연결리스트 복습 및 스택연결리스트 복습 및 스택
연결리스트 복습 및 스택
 
알고리즘
알고리즘알고리즘
알고리즘
 
Python + Excel
Python + Excel Python + Excel
Python + Excel
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
 

Más de Moonki Choi

2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차Moonki Choi
 
2021 알림 오세요
2021 알림 오세요2021 알림 오세요
2021 알림 오세요Moonki Choi
 
2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차Moonki Choi
 
2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차Moonki Choi
 
2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차Moonki Choi
 
2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차Moonki Choi
 
2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차Moonki Choi
 
2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차Moonki Choi
 
2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차Moonki Choi
 
2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차Moonki Choi
 
2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차Moonki Choi
 
2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차Moonki Choi
 

Más de Moonki Choi (12)

2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차
 
2021 알림 오세요
2021 알림 오세요2021 알림 오세요
2021 알림 오세요
 
2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차
 
2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차
 
2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차
 
2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차
 
2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차
 
2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차
 
2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차
 
2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차
 
2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차
 
2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차
 

Último

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 

Último (8)

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 

2021 1학기 정기 세미나 6주차

  • 1. 서울시립대 알고리즘 소모임 선형 자료구조 1학기 6주차
  • 2. 강의자 소개 2021 AL林 정기 세미나 2 이름 최문기 소속 서울시립대 컴퓨터과학부(16학번) 핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder) ICPC 팀 (팀명 미정) - 김정현, 오규민, 최문기
  • 3. 2021 AL林 정기 세미나 3 자료구조
  • 4. 자료구조(data structure) 2021 AL林 정기 세미나 4 효율적인 접근 및 수정을 가능하게 하는 자료의 집합 (In computer science, a data structure is a data organization, management, and storage format that enables efficient access and modification.) 효율적인 알고리즘을 설계하는데에 필요하다.
  • 5. 자료구조(data structure) 2021 AL林 정기 세미나 5 선형 구조(6주차) - 배열 - 연결 리스트 - 스택, 큐, 덱 비선형 구조(7주차) - 그래프 - 트리
  • 6. 선형 자료구조 2021 AL林 정기 세미나 6 일렬로 늘어선 자료들을 저장하기 위한 자료구조 - 정적 배열 - 동적 배열 - 연결 리스트 - 스택 - 큐 - 덱
  • 7. 2021 AL林 정기 세미나 7 배열, 연결 리스트
  • 8. 정적 배열 2021 AL林 정기 세미나 8 크기가 고정되어 있으며, 한번 생성한 배열은 크기를 변경하는 것이 불가능 ex) C언어 int array[5]; array[0] array[1] array[2] array[3] array[4]
  • 9. 동적 배열 2021 AL林 정기 세미나 9 크기를 지정하지 않고 동적으로 바꿀 수 있는 배열 파이썬은 list가 기본적으로 동적 배열
  • 10. 연결 리스트(링크드 리스트) 2021 AL林 정기 세미나 10 원소를 저장할 때 다음 원소가 있는 위치를 포함시키는 자료구조
  • 11. 배열 vs 연결 리스트 2021 AL林 정기 세미나 11 배열 연결 리스트 k번째 원소 접근 O(1) O(k) 임의 위치에 원소 추가/제거 O(N) O(1)
  • 12. 배열, 연결 리스트 - 표준 라이브러리 사용 2021 AL林 정기 세미나 12 표준 라이브러리에 구현된 동적 배열과 연결 리스트 자료구조 C++ Java Python 동적 배열 vector ArrayList [] 연결 리스트 list LinkedList 없음
  • 13. 2021 AL林 정기 세미나 13 스택, 큐, 덱
  • 14. 스택 2020 AL林 정기 스터디 14 “Last In First Out” 마지막으로 들어간 데이터가 가장 먼저 나오는 자료구조 다음 연산을 O(1)에 수행 push(item): 스택의 가장 위에 원소 추가 pop(): 스택의 가장 위의 원소를 제거 top(): 스택의 가장 위에 있는 원소 확인 empty(): 스택이 비어있는지 확인
  • 15. 큐 2020 AL林 정기 스터디 15 먼저 들어간 데이터가 가장 먼저 나오는 자료구조 다음 연산을 O(1)에 수행 push(item): 큐의 가장 뒤의 원소 추가 pop(): 큐의 가장 앞의 원소 삭제 front(): 큐의 가장 앞에 있는 원소 확인 back(): 큐의 가장 뒤에 있는 원소 확인 empty(): 큐가 비어있는지 확인 “First In First Out”
  • 16. 덱 2020 AL林 정기 스터디 16 스택과 큐를 합친 구조 양쪽에서 push pop이 가능 push push pop pop
  • 17. 스택, 큐, 덱 2020 AL林 정기 스터디 17 push pop push pop push push pop pop 스택 큐 덱
  • 18. 스택, 큐, 덱 - 구현하는 방법 2021 AL林 정기 세미나 18 • 정적 배열로 구현 • 동적 배열로 구현 • 연결 리스트로 구현 • 표준 라이브러리 사용
  • 19. 스택, 큐, 덱 – 표준 라이브러리 사용 2020 AL林 정기 스터디 19 자료구조 C++ Java Python 스택 stack Stack 없음(동적 배열을 사용) 큐 queue LinkedList 없음(덱을 사용) 덱 deque ArrayDeque deque
  • 20. 라이브러리를 씁시다! 2021 AL林 정기 세미나 20 실제로 스택, 큐, 덱을 구현할 일은 거의 없습니다. 다음을 연습합시다! 1. 각각의 자료구조의 성질 이해 2. 본인이 사용하는 언어에서 라이브러리를 쓰는 방법 3. 적절한 자료구조를 사용하여 문제를 해결하는 연습
  • 21. 라이브러리를 쓰는 방법 2021 AL林 정기 세미나 21 다음 문제로 연습해봅시다. 스택 https://www.acmicpc.net/problem/10828 큐 https://www.acmicpc.net/problem/18258 덱 https://www.acmicpc.net/problem/10866
  • 22. [BOJ 10828] 스택(Python) 2021 AL林 정기 세미나 22 from sys import stdin input = stdin.readline # python에서 스택은 list로 구현 stack = [] Q = int(input()) for _ in range(Q): query = input().split() # push X: 정수 X를 스택에 넣는 연산이다. if query[0] == "push": item = int(query[1]) stack.append(item) # pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. # 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "pop": if len(stack) == 0: print(-1) else: print(stack.pop()) # size: 스택에 들어있는 정수의 개수를 출력한다. if query[0] == "size": print(len(stack)) # empty: 스택이 비어있으면 1, 아니면 0을 출력한다. if query[0] == "empty": if len(stack) == 0: print(1) else: print(0) # top: 스택의 가장 위에 있는 정수를 출력한다. # 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "top": if len(stack) == 0: print(-1) else: print(stack[-1])
  • 23. [BOJ 18258] 큐(Python) 2021 AL林 정기 세미나 23 # size: 큐에 들어있는 정수의 개수를 출력한다. if query[0] == "size": print(len(queue)) # empty: 큐가 비어있으면 1, 아니면 0을 출력한다. if query[0] == "empty": if len(queue) == 0: print(1) else: print(0) # front: 큐의 가장 앞에 있는 정수를 출력한다. # 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "front": if len(queue) == 0: print(-1) else: print(queue[0]) # back: 큐의 가장 뒤에 있는 정수를 출력한다. # 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "back": if len(queue) == 0: print(-1) else: print(queue[-1]) from collections import deque from sys import stdin input = stdin.readline # python에서 큐는 collections.deque로 구현 queue = deque([]) Q = int(input()) for _ in range(Q): query = input().split() # push X: 정수 X를 큐에 넣는 연산이다. if query[0] == "push": item = int(query[1]) queue.append(item) # pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. # 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "pop": if len(queue) == 0: print(-1) else: print(queue.popleft())
  • 24. [BOJ 10866] 덱(Python) 2021 AL林 정기 세미나 24 from collections import deque from sys import stdin input = stdin.readline # python에서 덱은 collections.deque로 구현 dq = deque([]) Q = int(input()) for _ in range(Q): query = input().split() # push_front X: 정수 X를 덱의 앞에 넣는다. if query[0] == "push_front": item = int(query[1]) dq.appendleft(item) # push_back X: 정수 X를 덱의 뒤에 넣는다. if query[0] == "push_back": item = int(query[1]) dq.append(item) # pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. # 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "pop_front": if len(dq) == 0: print(-1) else: print(dq.popleft()) # pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. # 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "pop_back": if len(dq) == 0: print(-1) else: print(dq.pop()) # size: 덱에 들어있는 정수의 개수를 출력한다. if query[0] == "size": print(len(dq)) # empty: 덱이 비어있으면 1을, 아니면 0을 출력한다. if query[0] == "empty": if len(dq) == 0: print(1) else: print(0)
  • 25. [BOJ 10866] 덱(Python) 2021 AL林 정기 세미나 25 # front: 덱의 가장 앞에 있는 정수를 출력한다. # 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "front": if len(dq) == 0: print(-1) else: print(dq[0]) # back: 덱의 가장 뒤에 있는 정수를 출력한다. # 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다. if query[0] == "back": if len(dq) == 0: print(-1) else: print(dq[-1])
  • 26. 2021 AL林 정기 세미나 26 문제를 풀어봅시다.
  • 27. [BOJ 9012] 괄호 2021 AL林 정기 세미나 27 YES ( ( ) ( ) ) ( ( ( ) ) ) ( ) ( ) ( ) ( ) ( ( ) ( ) ( ) ) ( ) NO ( ( ) ) ( ) ) ( ( ( ( ) ( ) ) ( ) ( ( ( ) ( ) ( ( ) ) ) ( ( ( ( ) ) ) ) ( ) ( ( ) ( ( ( ) ) ( ) (
  • 28. [BOJ 9012] 괄호 2021 AL林 정기 세미나 28 단순히 괄호의 갯수만 세서 풀면 안됩니다. ex) “ ) ( ” ① NO인 경우 1. ( ( ) ) ( ) ) -> 닫는 괄호에 대해 여는 괄호가 없을 때 2. ( ( ( ( ) ( ) ) ( ) -> 여는 괄호에 대해 닫는 괄호가 없을 때
  • 29. [BOJ 9012] 괄호 2021 AL林 정기 세미나 29 ② 괄호 쌍을 맞추는 방법 1. stack에 여는 괄호를 쌓으면서(push) 2. 닫는 괄호를 만나면 stack에 쌓아놓은 여는 괄호와 매칭합니다.(pop) 따라서 stack으로 괄호 쌍을 맞추면서 NO인 경우를 판별하면 됩니다.
  • 30. [BOJ 9012] 괄호 - 소스코드 2021 AL林 정기 세미나 30 Q = int(input()) for _ in range(Q): str = input() stack = [] answer = 'YES' # '(' -> push # ')' -> pop for c in str: if c == '(': stack.append('(') elif c == ')': # 1. 닫는 괄호에 대해 여는 괄호가 없을 때 NO if len(stack) == 0: answer = 'NO' else: stack.pop() # 2. 여는 괄호에 대해 닫는 괄호가 없을 때 NO if len(stack) > 0: answer = 'NO' print(answer)
  • 31. [BOJ 2164] 카드2 2021 AL林 정기 세미나 31
  • 32. [BOJ 2164] 카드2 2021 AL林 정기 세미나 32 그대로 시뮬레이션을 하면 됩니다. while(카드가 한 장이 아닐 때) { 1. 제일 위에 있는 카드를 버린다. 2. 제일 위에 있는 카드를 제일 아래에 옮긴다. } 1과 2를 효율적으로 수행할 수 있는 자료구조 : 큐
  • 33. [BOJ 2164] 카드2 - 소스코드 2021 AL林 정기 세미나 33 from collections import deque N = int(input()) cards = [i for i in range(1, N + 1)] queue = deque(cards) while len(queue) > 1: # 1. 제일 위에 있는 카드를 버린다. queue.popleft() # 2. 제일 위에 있는 카드를 제일 아래에 옮긴다. x = queue.popleft() queue.append(x) print(queue[0])
  • 34. (참고) 없어도 풀리는데요? 2021 AL林 정기 세미나 34 [BOJ 9012 괄호]는 스택이 없어도 풀립니다. -> 괄호의 종류가 한 종류이기 때문입니다. -> 괄호의 종류가 여러개로 늘어나면 스택을 써야합니다. -> 연습문제: 괄호의 값 [BOJ 2164 카드2]는 큐가 없어도 풀립니다. -> 규칙성을 잘 찾으면 식 하나로 O(1)에 풀립니다. -> 이건 오늘 주제와 무관하니 넘어갑시다.
  • 35. 연습문제 2021 AL林 정기 세미나 35 스택, 큐, 덱 기본 문제 10828 스택 18258 큐 2 10866 덱 연습 문제 (문제풀이 스터디 발표) 2504 괄호의 값 1935 후위 표기식2 11866 요세푸스 문제 0 1966 프린터 큐 1021 회전하는 큐
  • 36. 연습문제 2021 AL林 정기 세미나 36 스택, 큐, 덱 도전 문제 1918 후위표기식 5430 AC 3078 좋은 친구 17298 오큰수 3015 오아시스 재결합
  • 37. 2021 AL林 정기 세미나 37 참고
  • 38. 스택, 큐의 응용 2021 AL林 정기 세미나 38 스택과 큐는 컴퓨터과학에서 정말 자주 나옵니다. • 메모리 관리(Memory management) • 재귀함수는 스택 메모리를 사용합니다. • CPU 스케쥴링(CPU task scheduling) • 인터럽트 핸들링(Handling of interrupt) • 네트워크 스케쥴링(Network scheduling) 출처: https://dojang.io/mod/page/view.php?id=584
  • 39. 스택, 큐의 응용 2021 AL林 정기 세미나 39 다양한 알고리즘을 구현하는 데에도 필요합니다. - 그래프 탐색(BFS, DFS) - 사이클 찾기, 위상정렬, SCC - 그라함 스캔 등등
  • 40. 직접 구현하기 2021 AL林 정기 세미나 40 보통 학교에서 자료구조 수업을 들으면 이 중 일부를 구현해봅니다. 자료구조 책을 참고하는게 좋을 것 같습니다. 아래는 제가 구글링 해봤습니다 동적 배열 C언어로 구현 : 링크 ★ 연결 리스트 C언어로 구현 : 링크 python으로 구현 : 링크
  • 41. 직접 구현하기 2021 AL林 정기 세미나 41 스택 - 정적 배열로 구현: C언어 - 동적 배열로 구현: 동적 배열을 그대로 사용하면 됩니다. - 연결 리스트로 구현: Python, C언어 큐 - 정적 배열로 구현: C언어, C언어 - 연결 리스트로 구현: Python, C언어 덱 - 정적 배열로 구현: C언어 - 연결 리스트로 구현: Python, C언어
  • 42. 그 외 참고할만한 자료 2021 AL林 정기 세미나 42 kks님 블로그 • https://m.blog.naver.com/kks227/220781402507 • https://m.blog.naver.com/kks227/220781557098 • https://m.blog.naver.com/kks227/220781851401 바킹독님 블로그 • https://blog.encrypted.gg/927?category=773649 • https://blog.encrypted.gg/932?category=773649 • https://blog.encrypted.gg/933?category=773649 • https://blog.encrypted.gg/934?category=773649 • https://blog.encrypted.gg/935?category=773649 • https://blog.encrypted.gg/936?category=773649 (수식의 괄호 쌍)