본문 바로가기
반응형

분류 전체보기35

[자료구조] 스택(Stack)의 후위표기식으로 변환(괄호가 있는 경우) (5) 중위 표기식을 후위 표기식으로 변환 (괄호가 있는 경우) e.g ) (2+10)/(9-6) 1. 여는 괄호는 무조건 스택에 push (Tip.이때 스택 내의 어떤 연산자도 pop 하지 않는다) 2. 어떤 연산자를 스택에 push할 때 스택의 top에 여는 괄호가 있으면 아무것도 pop하지 않고 push 3. 입력에 닫는 괄호가 나오면 스택에서 여는 괄호가 나올 때 까지 pop하여 출력한다. 4. 닫는 괄호는 스택에 push 하지 않는다. (stack의 여는 괄호도 pop 한다.) # 괄호가 있는 중위 표기식을 후위 표기식으로 변환 # 입력 : 3 + ( ( 4 * 7 ) / 2 ) # 기대 출력 : [3, 4, 7, '*', 2, '/', '+'] OPERATORS = "+-*/()" PRECEDENCE.. 2022. 11. 14.
[자료구조] 스택(Stack)의 응용 중위표기식 -> 후위표기식 (4) 중위 표기식을 후위 표기식으로 변환 e.g ) 2 - 10 / 5 * 6 + 4 1. 중위 표기식을 처음부터 순서대로 읽음 2. 피연산자의 경우에는 바로 출력 가능 3. 연산자의 경우 일단 스택에 stack에 push하여 우선 순위 확인 필요 (LIFO 구조이기 때문) 4. Tip. 스택의 우선순위 보다 더 높은 연산자가 있으면 pop하여 출력한 후에 push (우선순위가 높은 연사자는 모두 pop 해야함) 5. 수식이 종료되면 스택에 있는 모든 연산자를 pop하여 출력 #Python 코드 # 괄호가 없는 중위 표기식을 후위 표기식으로 변환 # 입력 : 2 - 10 / 5 * 6 + 4 # 기대 출력 : [2, 10, 5, '/', 6, '*', '-', 4, '+'] OPERATORS = '+-*/' .. 2022. 11. 11.
[자료구조] 스택(Stack)의 응용 후위표기식 - python을 통한 실습 (3) 후위 표기식(postfix expression) - 일반적으로 사용하는 수식의 표기법은 중위 표기식(infix expression) ㄴ 연산자(+, - *, /)가 피연산자의 사이에 들어감 - 후위 표기식(postfix expression) ㄴ 연산자가 피연산자 뒤에 나옴 - 괄호가 필요없음 후위 표기식을 스택으로 구현 (입력 : 후위 표기식, 출력 : 계산 값) 1. 피연산자를 stack에 넣는다 2. 연산자가 나오면 stack에서 pop()을 두번하여 연산자를 꺼낸 후 적용 ㄴ Tip. 먼저 꺼낸 값이 오른쪽 피연산자가 되고, 나중에 꺼낸 값이 왼쪽 피연산자가 된다! 3. 결과값을 다시 stack에 push() 4. 반복 후 stack에는 하나의 값만 남아 있어야하며 그 값이 계산 결과가 된다. # .. 2022. 11. 11.
[자료구조] 스택(Stack)의 이해 - python을 통한 실습 (2) 스택(Stack) - 스택은 일종의 리스트 - 데이터의 삽입과 삭제가 한쪽의 끝에서만 이루어진다 - LIFO (Last-In, First-Out) - 삽입/삭제가 일어나는 쪽을 스택의 top이라고 부름 스택의 연산 - push : 스택에 새로운 원소를 삽입하는 연산 - pop : 스택의 top에 있는 원소를 스택에서 제거하고 반환 - peek : 스택 top의 원소를 제거하지 않고 반환 - empty : 스택이 비었는지 검사 #Python 예제 stack = [1,2,3] stack.append(4) #stack push print(stack) # [1,2,3,4] top = stack.pop() #stack pop print(top) #4 print(stack) #[1,2,3] top = stack[-.. 2022. 11. 9.
[자료구조] 포인터(pointer), 메모리- 기본기를 탄탄하게 (1) 메모리 포인터(pointer)를 이해하기 이전에 메모리를 먼저 이해해야 함 메모리란 아래 3가지 특징을 가진다 - 컴퓨터의 메모리는 데이터를 보관하는 장소 - Byte(8 bits) 단위로 지정 - 모든 변수는 주소를 가짐 포인터 포인터(pointer)는 메모리 주소를 값으로 가지는 변수 int num = 12; int *p; // 포인터 변수 p 선언 p = # // 포인터 변수 p에 변수 num의 주소를 저장 - 연산자 &는 변수로부터 그 변수의 주소를 추출하는 연산자 - 연산자 *는 치환문의 왼쪽, 오른쪽 위치에 따라 의미하는 바가 다름 ㄴ 오른쪽 : 변수가 가진 값 int tmp = *p; 라고 선언 했을 때, p는 현재 num의 주소를 가지고 있으므로 12를 의미함 // tmp에 12라는.. 2022. 10. 29.