저희(사람)이 사용하는 수식은 중위표기법인데요. 하지만 컴퓨터가 수식을 계산할 때에는 후위표기식으로 바꾸어서 계산합니다. 예를 들어 8/2-3+3*2을 계산한다고 하면 컴퓨터는 82/3-32*+로 바꾸어서 계산해요.(수식에 사용되는 숫자는 한자리라고 가정) 중위 수식을->후위 수식으로 바꾸는게 후위표기식을 계산하는 것보다 어렵기에.. 먼저 후위표기식을 계산하는 것부터 시작할게요. 알고리즘은 다음과 같아요. *문자열을 읽는다고 가정-숫자라면 스택에 집어넣습니다.-연산자가 나오면 스택에서 숫자를 2개 꺼내서 연산후에 다시 스택에 집어넣습니다.-문자열이 끝났다면 스택에 남아있는 값이 결과값. 다음의 stack.h/stack.c를 사용했습니다. 1234567891011121314151617181920212223..
https://www.acmicpc.net/problem/1463 백준 1463번 1로 만들기 입니다. 제가 dp를 연습하기 시작했는데, 연습문제로 풀기에 좋은 문제같았습니다.n이 주어지면 그 숫자를 1로 만드는데, -1 , /2, /3 (나누어 떨어진다면) 만큼 이동합니다. 이동할 때 이동횟수 + 1 을 해주는 것이 중요!밑에는 제 코드입니다. 12345678910111213141516171819202122232425#include #include //min함수#include using namespace std; vector dp; int make1(int n) { if (n == 1) return 0;//도착 if (dp[n] != -1) return dp[n];//이미 계산했다면 그 값을 리턴 in..
singleLinkedList.h123456789101112131415161718#ifndef SINGLELINKEDLIST_H#define SINGLELINKEDLIST_H typedef int element;typedef struct ListNode { element data; struct ListNode *link;}Node; Node* create_node(element data, Node* link);void insert_node(Node** phead, Node* p, Node* newNode);void remove_node(Node** phead, Node* p, Node* removed);void display(Node* head);void display_recur(Node* head);N..
https://www.acmicpc.net/problem/2573 백준 2573번 빙산입니다. 개인적으로 괜찮게 푼 문제라고 생각하는데.. 다른분들 푼 코드를 보면 뭔가 아쉬운 문제입니다. 이번 문제에서 어려웠던것은 녹을 때 빙산들을 어떻게 처리할 것인가인데요. 저는 따로 지도를 만들어서 그 지도에 그린것들을 다시 복원하는 방법을 선택했어요.밑에는 제 코드입니다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798#includ..
https://www.acmicpc.net/problem/2589 이번문제는 보물섬입니다. 문제 풀때 가장 고민했던것은 '시작점을 어떻게 찾을 것인가'였는데요. 답은 가능한 모든 시작점에서 탐색을 하면서 가장 긴 거리를 찾는 것입니다! 나머지는 컴퓨터가 알아서 다해줄겁니다..밑에는 제 코드입니다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include #include #include using namespace std; vector map;//지도vector visited;//방문체크typedef p..
스택에 이어 큐 포스팅입니다. 스택같은 경우에는 먼저들어간 노드가 가장 마지막에 나왔다면(후입선출) 큐같은 경우는 먼저 들어간 노드가 가장 먼저 나옵니다(선입선출).밑에는 동적할당으로 구현한 큐입니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include #include typedef int element;typedef struct node { element data; struct node* link;}Node;//노드 구조체 typedef struct queue { Node* head; Node* tail;}Queue;//head..
https://www.acmicpc.net/problem/5014 이번문제는 전형적인 BFS문제입니다. 시작점부터 목표점까지 갈 수 있도록 탐색하는 문제입니다. 밑에는 제 코드입니다.1234567891011121314151617181920212223242526272829303132333435363738394041424344#include #include using namespace std; int F, S, G, U, D; vector floors;vector visited;//visited에 이동횟수 입력 bool isSafe(int pos) { if (pos F) return false; else return true;//범위 체크} int bfs(int from,int to) { queue q; q..
https://www.acmicpc.net/problem/7576백준 7576번 토마토 문제입니다. 이번문제는 DFS로는 접근하기 어려운 문제인 것 같아요. 혹시 DFS로 푸신분이 있으시다면 댓글로.. 알려주세요! 이번문제도 다른 탐색문제들과 다른것은 많이 없습니다. -1이 탐색 불가능한점(바다문제라면 바다에 해당되겠네요)으로 설정 후 탐색해 주시면 됩니다. 또한 다른 문제들은 시작점이 하나지만 이문제는 시작점이 여러개가 될 수 있는 문제입니다. 따라서 큐에 시작점을 삽입할때 1로 표시된 시작점들을 모두 넣어주어야 해요!! 그럼 컴퓨터가 알아서.. 다해줍니다^^. 밑에는 제 코드입니다.1234567891011121314151617181920212223242526272829303132333435363738..
https://www.acmicpc.net/problem/6593 이번문제는 백준 6593번 상범빌딩 이예요. 제가 요즘 풀고있는 탐색문제들과 같은 종류입니다. 여기서 추가된건 상하좌우에다가 높이까지 추가된 경우인데요, 탐색에서 높이만 추가해서 탐색하면 아주 쉽게 풀 수 있는 문제입니다.밑에는 제 코드입니다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293#include #include using namespace std; typedef s..
안녕하세요. 이번에 연구해 볼 과제는 Quick Sort(퀵 정렬)입니다. 이 정렬은 현재 존재하는 정렬 알고리즘 중에서 평균적인 상황일 때 최고의 성능을 보입니다. 평균적으로 시간복잡도 O(n log n)이 걸리고 최악의 경우 시간복잡도 O(n^2)이 됩니다. 퀵 정렬은 배열에서 피벗(기준)을 잡은 후에 피번 기준으로 작은 값은 왼쪽(오름차순이라면 오른쪽)으로, 큰 값은 오른쪽으로 이동시킵니다. 같은 알고리즘으로 피벗기준으로 왼쪽배열과 오른쪽 배열을 정렬합니다(재귀적으로).그림 출처 : (https://namu.wiki/w/%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98) 제가 퀵 정렬을 구현하면서 알게된 것들을 포스팅 하려고합니다..1234567..