1. 스택 (Stack)(1) 정의와 성질 스택은 기본적으로 후입선출(LIFO, Last-In-First-Out) 방식을 따르는 자료구조이다. 즉, 프링글스 통처럼 한 쪽에서만 데이터를 넣는 구조로 가장 마지막에 추가된 원소가 가장 먼저 제거된다! 이러한 특성 때문에 스택은 데이터를 일시적으로 저장하며 저장된 역순으로 접근해야할 때 유용하게 사용된다. (2) 관련 메서드 및 구현 관련 메서드 (C++ 기준) void push(const T& value);스택 최상단에 원소를 추가한다.시간복잡도 : O(1)void pop();스택 최상단 원소를 제거한다. 시간복잡도 : O(1)T& top();스택 최상단 원소를 조회한다.시간복잡도 : O(1)bool empty();스택이 비어 있는지 확인한다.시간복잡도 ..
Algorithm
1. 문제 설명문제 바로 가기 2. 풀이 과정문제 해결의 흐름기능 순서대로 개발함을 인지하자. progresses 배열을 순회하며 기능개발에 걸리는 시간(days)을 구하자.days가 큐에 저장된 이전 값보다 크다면 이전 작업의 개발에 현재 작업이 포함되지 않기에 끊어주어야 한다.작거나 같다면 현재 작업이 이전 작업에 포함되기에 끊어주지 않아도 된다.코드 #include #include #include using namespace std;vector solution(vector progresses, vector speeds) { vector answer; queue q; for (int i = 0; i 3. 후기 관심 있는 부분이 days가 가장 큰 q.front() 값임이 파악되면 ..
1. 문제 설명문제 바로가기2. 풀이 과정문제 해결의 흐름 처음에 문제 자체를 이해하는데 어려움이 있었다-! 자세히 살펴보니 입력된 주식가격(prices)이 언제까지 떨어지지 않는지 구해주면 되는 것이었다.이때, 주식 가격이 입력되는 간격은 1초이다. 입력된 가격 배열 prices를 순회하며 이전에 살펴봤던 값이랑 비교하였을 때 현재 값이 이전 값보다 더 작다면 이전 값의 가격이 하락한 것이기에 가격 하락 전까지의 기간을 배열에 저장해주자!4.에 해당하지 않는 값들은 Stack에 계속 쌓아준다.4.~5.의 과정이 끝난 이후 Stack에 있는 값들을 pop하며 배열에 저장한다.코드 #include #include #include using namespace std;vector solution(vector ..
1. 문제 설명문제 바로가기2. 풀이 과정문제 해결의 흐름 1. 2493 탑 문제와 굉장히 비슷하지만 이 문제는 이전에 추가된 자료가 아닌 새롭게 추가된 자료에 대해 조건을 걸어주어야할듯 하다! 2. 새롭게 추가되는 빌딩의 높이가 직전에 추가된 빌딩의 높이보다 높거나 같다면 이전에 추가된 빌딩의 관리자는 새롭게 추가된 빌딩을 보지 못한다. 3. 쉽게 생각해본다면 이전에 추가된 빌딩들보다 낮은 높이의 빌딩이 추가된다면 계속 빌딩을 볼 수 있다. 4. 반면, 이전 빌딩보다 높이가 높거나 같은 빌딩이 추가된다면 이전 빌딩의 관리자는 더 이상 추가되는 빌딩을 볼 수 없기에 삭제해주어야 한다. 5. 이 문제 역시 새롭게 추가되는 자료와 이전에 추가된 자료에 대해 관심이 깊으니 후입후출..
1. 문제 설명문제 바로가기2. 풀이 과정문제 해결의 흐름 1. 탑의 높이가 하나씩 추가되는 형태군!! 추가될 때마다 출력할지 한 번에 결과를 출력할지 생각해봐야겠다. 2. 음.. 탑의 높이가 추가될 때마다 바로 직전에 추가된 탑의 높이와 비교하는게 어떨까? 만약 추가된 탑의 높이가 더 크다면 바로 직전 탑이 수신을 절대 받지 못할 것이고, 이전에 추가된 탑의 높이가 더 크다면 수신을 받을 수 있겠군!!! 3. 이를 다음과 같이 구체화하여 조건문으로 나타내면 쉽게 풀 수 있을듯! 아래 조건문에 맞지 않는 높이는 수신을 받을 수 없기 때문에 삭제 처리해면 될듯 if (새로 추가되는 높이 4. 후입선출의 자료에 관심이 크기에 stack을 사용하여 풀어보자!! 코드 #includ..
1. 문제 설명문제 링크 : https://www.acmicpc.net/problem/31796부산대학교 2024 pnup div1 / div2 기출문제 2. 풀이 과정문제 해결의 흐름입력 받을 때 바이러스 위치들을 전부 queue에 저장하자bfs 구현 q_virus와 q_building, 둘 중 하나가 빌 때까지 bfs 탐색이 이루어진다.Tg의 시간동안 virus가 감염시키는 것이 building이 완전히 감염되는 것보다 우선시되어야 한다. virus의 상하좌우에 building이 위치해 있다면 해당 building은 감염되었기에 q_building에 push해주자virus의 상하좌우에 안전지역이 위치해 있다면 해당 안전지역은 감염되어 virus가 되었기에 q_viurs에 push해주자q_buildin..
1. 문제 설명링크 : https://www.acmicpc.net/problem/317962. 풀이 과정문제 해결의 흐름 입력 받은 N개의 책 가격들을 오름차순으로 정렬하자. 책 가격들이 저장된 vector를 탐색하며 제일 값싼 책을 기준으로 2배 이상의 가격이 있다면 페이지를 늘리고 그 가격을 제일 값싼 책으로 갱신한다. 나의 코드#include#include #include using namespace std;int main() { // 입력 받기 int N; cin >> N; vector bookPrice; for (int i = 0; i > price; bookPrice.push_back(price); } // 정렬 sort(bookPrice..
1. 문제 설명링크 : https://www.acmicpc.net/problem/317972. 풀이 과정문제 해결의 흐름 아파트 층 수를 (참가자의 수 * 2)로 나눠주자! 참가자는 손이 두 개고 (참가자의 수 * 2)로 나눠준 나머지가 실질적인 아파트 층 수라고 봐도 무방하다. 만약 (참가자의 수 * 2)로 나눈 나머지가 0이라면 아파트 층 수는 (참가자의 수 * 2)이다. 반복문을 돌며 아파트 층 수번째 층에 있는 손바닥의 주인을 찾는다. 나의 코드 #include #define MAX 10001using namespace std;int arrApartment[MAX] = {}; // 0으로 초기화int main() { // 입력 받기 int N, M; // N : 아파트 층 수 , M :..