전체 글 보기
-
위의 STL 자료구조는 매우 자주 쓰이는 형태이므로 잘 정리해 두어야 한다. Map 이 알고리즘을 활용하기 위해서는 상단에 반드시 #include 을 선언해야 한다. 이 자료구조의 경우는, vector나 배열과는 다르게 index를 활용하여 접근하는 것이 아니라 다른 자료형을 사용할 수 있는 것이다. 이 방법의 경우에는 검색, 삽입, 삭제 등의 속도가 빠른 편에 속한다. 선언 방법은 "map 변수이름"이다. Map을 사용해야 하는 경우는, 단순히 기존에 vector나 배열을 사용하는 방식처럼 index와 숫자를 매칭시킬 수 없는 상황이거나 연관있는 2개의 값을 매개하여 저장해야할 때 사용하게 된다. 사용방법은 다음과 같다. m.size() : m의 원소의 개수 m.empty() : m의 노드의 개수가 0..
3. Map, Set위의 STL 자료구조는 매우 자주 쓰이는 형태이므로 잘 정리해 두어야 한다. Map 이 알고리즘을 활용하기 위해서는 상단에 반드시 #include 을 선언해야 한다. 이 자료구조의 경우는, vector나 배열과는 다르게 index를 활용하여 접근하는 것이 아니라 다른 자료형을 사용할 수 있는 것이다. 이 방법의 경우에는 검색, 삽입, 삭제 등의 속도가 빠른 편에 속한다. 선언 방법은 "map 변수이름"이다. Map을 사용해야 하는 경우는, 단순히 기존에 vector나 배열을 사용하는 방식처럼 index와 숫자를 매칭시킬 수 없는 상황이거나 연관있는 2개의 값을 매개하여 저장해야할 때 사용하게 된다. 사용방법은 다음과 같다. m.size() : m의 원소의 개수 m.empty() : m의 노드의 개수가 0..
2020.09.28 -
이 문제의 경우에는 상황 자체는 쉽게 이해할 수 있으나, 구현이 상당히 까다롭다. 그러한 까닭에 디버깅을 한참 시도하였다..(문제를 잘못읽은 영향이 사실 제일 크다.) 이 문제를 풀기위해서 가장 중요한 조건은 2가지의 작동이 순차적으로 진행된다는 것이다. 미세먼지의 확산을 시키고, 공기청정기에 의한 작용을 살펴주면 된다. 단, 미세먼지의 확산이 동시에 되기 때문에 temp array를 하나 만들어줘서 따로 처리해주어야 한다. 그렇지 않으면 배열이 바뀌면서 확산에 영향을 끼치게 되기 때문에 오류가 나올 수 밖에 없다. 또한, 공기청정기에 의한 확산은 일종에 먼지가 이동하는 작업을 거치게 되는데 이전의 배열에 있는 숫자가 이후로 옮겨지는 양상이므로 그것을 저장해주기 위해서 DP방식을 활용하여 진행해주면 된다..
[백준 17144번] [구현] [동적 계획법] 미세먼지 안녕!이 문제의 경우에는 상황 자체는 쉽게 이해할 수 있으나, 구현이 상당히 까다롭다. 그러한 까닭에 디버깅을 한참 시도하였다..(문제를 잘못읽은 영향이 사실 제일 크다.) 이 문제를 풀기위해서 가장 중요한 조건은 2가지의 작동이 순차적으로 진행된다는 것이다. 미세먼지의 확산을 시키고, 공기청정기에 의한 작용을 살펴주면 된다. 단, 미세먼지의 확산이 동시에 되기 때문에 temp array를 하나 만들어줘서 따로 처리해주어야 한다. 그렇지 않으면 배열이 바뀌면서 확산에 영향을 끼치게 되기 때문에 오류가 나올 수 밖에 없다. 또한, 공기청정기에 의한 확산은 일종에 먼지가 이동하는 작업을 거치게 되는데 이전의 배열에 있는 숫자가 이후로 옮겨지는 양상이므로 그것을 저장해주기 위해서 DP방식을 활용하여 진행해주면 된다..
2020.09.26 -
이 문제의 경우에서 가장 중요한 부분은 )가 등장했을 때, 막대기의 끝인지 레이저인지 구분하는 것이다. 레이저는 바로 앞의 값이 (이면 되고, 막대기의 끝은 바로 앞의 값이 )이면 된다. 이것을 기준으로 막대기의 갯수를 체크하면 된다. 단, 막대기의 갯수는 (의 갯수를 통해서 계산할 수 있는데 레이저가 나오거나 막대기의 끝이면 (의 갯수에서 -1을 시켜주면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ string input_data; cin >> input_data; // input data int len_data..
[백준 10799번] 쇠막대기이 문제의 경우에서 가장 중요한 부분은 )가 등장했을 때, 막대기의 끝인지 레이저인지 구분하는 것이다. 레이저는 바로 앞의 값이 (이면 되고, 막대기의 끝은 바로 앞의 값이 )이면 된다. 이것을 기준으로 막대기의 갯수를 체크하면 된다. 단, 막대기의 갯수는 (의 갯수를 통해서 계산할 수 있는데 레이저가 나오거나 막대기의 끝이면 (의 갯수에서 -1을 시켜주면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ string input_data; cin >> input_data; // input data int len_data..
2020.09.21 -
마지막에 쓴 수를 0이 나오면 지우는 방식이므로 스택을 활용하면 된다. 추가적으로, 이 문제에서 실수한 지점은 for iteration을 활용할 때 조건문의 경우는 한바퀴 돌때마다 그때그때 체크한다는 점이다. 이 점은 파이썬과는 차이가 있으므로 반드시 정리해두어야 한다. 위의 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ int k; cin >> k; stack data_store; for(int i = 0; i > temp; if (temp == 0){ data_store.pop();..
[백준 10773번] [스택] 제로마지막에 쓴 수를 0이 나오면 지우는 방식이므로 스택을 활용하면 된다. 추가적으로, 이 문제에서 실수한 지점은 for iteration을 활용할 때 조건문의 경우는 한바퀴 돌때마다 그때그때 체크한다는 점이다. 이 점은 파이썬과는 차이가 있으므로 반드시 정리해두어야 한다. 위의 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ int k; cin >> k; stack data_store; for(int i = 0; i > temp; if (temp == 0){ data_store.pop();..
2020.09.21 -
스택의 원리만 알면 상당히 쉽다. 오른쪽에서 바라보고 있는 상황이므로 Last input값을 기준으로 계속해서 바라보고 있으므로 스택임을 추론할 수 있다. 추가적으로 마지막으로 바라본 것보다 더 큰 것만을 count를 올려주는 것이므로, 계속해서 pop시키면서 max값보다 크면 갯수를 올리고 max값을 업데이트시키면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include using namespace std; int main(void){ int n; cin >> n; stack stack_store; for(int i = 0; i > temp; stack_sto..
[백준 17608번] [스택] 막대기스택의 원리만 알면 상당히 쉽다. 오른쪽에서 바라보고 있는 상황이므로 Last input값을 기준으로 계속해서 바라보고 있으므로 스택임을 추론할 수 있다. 추가적으로 마지막으로 바라본 것보다 더 큰 것만을 count를 올려주는 것이므로, 계속해서 pop시키면서 max값보다 크면 갯수를 올리고 max값을 업데이트시키면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include using namespace std; int main(void){ int n; cin >> n; stack stack_store; for(int i = 0; i > temp; stack_sto..
2020.09.21 -
이 문제 자체는 그렇게 어렵지 않으나, 문제의 설명이 조금은 난해하다. 요약하여 말하자면, 주어진 스택을 pop시켜서 나온 결과를 수열로 만드는 것이 가능한지를 물어보는 것이고 push할때는 이전에 push한 수보다는 무조건 큰 것만 가능하다. 즉, 따라서 이 문제에서 이전까지 push한 값이 무엇인지를 추가적으로 저장해주는 작업을 해야한다. 다만, 이 문제에서 조건으로 제시한 NO의 기준은 기존에 스택 값의 top값이 pop시켜서 나와야하는 수보다 더 큰 경우에 발생시켜주면 된다. 왜냐하면 문제의 설명에 따르면 pop을 시켜서 나온 결과들의 집합인데, 나와야하는 값이 스택의 top값보다 더 커버리면 무조건 현재 스택의 top값을 pop시켜야한다. 그러면 조건을 만족시키지 않는다. 해당하는 알고리즘을 활..
[백준 1874번] [스택] 스택 수열이 문제 자체는 그렇게 어렵지 않으나, 문제의 설명이 조금은 난해하다. 요약하여 말하자면, 주어진 스택을 pop시켜서 나온 결과를 수열로 만드는 것이 가능한지를 물어보는 것이고 push할때는 이전에 push한 수보다는 무조건 큰 것만 가능하다. 즉, 따라서 이 문제에서 이전까지 push한 값이 무엇인지를 추가적으로 저장해주는 작업을 해야한다. 다만, 이 문제에서 조건으로 제시한 NO의 기준은 기존에 스택 값의 top값이 pop시켜서 나와야하는 수보다 더 큰 경우에 발생시켜주면 된다. 왜냐하면 문제의 설명에 따르면 pop을 시켜서 나온 결과들의 집합인데, 나와야하는 값이 스택의 top값보다 더 커버리면 무조건 현재 스택의 top값을 pop시켜야한다. 그러면 조건을 만족시키지 않는다. 해당하는 알고리즘을 활..
2020.09.21 -
이 문제는 큐(Queue)를 활용하여 풀 수 있는 상황이다. 이를 인지하는 방법은 앞에서부터 k번째 숫자를 계속해서 지워나가는 것이므로, 앞에서부터 호출을 하는 자료형인 Queue임을 인지하면 된다. 추가적으로 k번째 숫자가 나올 때까지 원이므로 계속해서 앞에 있는 숫자가 뒤로 보내지는 상황이므로 k번쨰 숫자가 아닌 수들은 pop하고 push하여 뒤로 보내면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ int n, k; cin >> n >> k; queue circular_data; vector result_dat..
[백준 1158번] [큐] 요세푸스 문제이 문제는 큐(Queue)를 활용하여 풀 수 있는 상황이다. 이를 인지하는 방법은 앞에서부터 k번째 숫자를 계속해서 지워나가는 것이므로, 앞에서부터 호출을 하는 자료형인 Queue임을 인지하면 된다. 추가적으로 k번째 숫자가 나올 때까지 원이므로 계속해서 앞에 있는 숫자가 뒤로 보내지는 상황이므로 k번쨰 숫자가 아닌 수들은 pop하고 push하여 뒤로 보내면 된다. 해당하는 알고리즘으로 코드를 구현하면 다음과 같다. #include #include #include #include #include #include #include using namespace std; int main(void){ int n, k; cin >> n >> k; queue circular_data; vector result_dat..
2020.09.21 -
이 문제를 보고 큐(Queue)형태의 자료라는 것을 파악했어야 한다. 왜냐하면, 선입선출 형태로 자료를 호출하기를 요구하고 있기 때문이다. 다만, 이 문제에서는 독특한 지점이 단순히 선입 선출을 활용할 수 없고 중요도를 기준으로 다시 재배치해야한다는 점인데 중요도가 맨 앞에 위치한 것이 최대가 아니면 pop시키고 다시 그 수를 push해주면 된다. 추가적으로 m번째 숫자를 따로 저장을 해 두어야하기 때문에 pair자료형을 활용하여 해당하는 자료형을 구분한다. (문제에서 같은 숫자가 등장할 수 있다고 하였으므로, 같은 숫자를 구분하려면 어쩔 수 없이 pair자료형을 활용하여 추가적인 자료형을 도입하여 구분해야 한다.) 위의 알고리즘을 활용하여 코드를 구현하면 다음과 같다. #include #include ..
[백준 1966번] [큐] 프린터 큐이 문제를 보고 큐(Queue)형태의 자료라는 것을 파악했어야 한다. 왜냐하면, 선입선출 형태로 자료를 호출하기를 요구하고 있기 때문이다. 다만, 이 문제에서는 독특한 지점이 단순히 선입 선출을 활용할 수 없고 중요도를 기준으로 다시 재배치해야한다는 점인데 중요도가 맨 앞에 위치한 것이 최대가 아니면 pop시키고 다시 그 수를 push해주면 된다. 추가적으로 m번째 숫자를 따로 저장을 해 두어야하기 때문에 pair자료형을 활용하여 해당하는 자료형을 구분한다. (문제에서 같은 숫자가 등장할 수 있다고 하였으므로, 같은 숫자를 구분하려면 어쩔 수 없이 pair자료형을 활용하여 추가적인 자료형을 도입하여 구분해야 한다.) 위의 알고리즘을 활용하여 코드를 구현하면 다음과 같다. #include #include ..
2020.09.21