Problem Solving
-
이 문제의 경우에서 가장 중요한 부분은 )가 등장했을 때, 막대기의 끝인지 레이저인지 구분하는 것이다. 레이저는 바로 앞의 값이 (이면 되고, 막대기의 끝은 바로 앞의 값이 )이면 된다. 이것을 기준으로 막대기의 갯수를 체크하면 된다. 단, 막대기의 갯수는 (의 갯수를 통해서 계산할 수 있는데 레이저가 나오거나 막대기의 끝이면 (의 갯수에서 -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 -
스택의 대표적인 문제이다. vector를 활용해서 풀 수도 있으나, 여러가지 측면때문에 stack 헤더를 활용하여 문제를 접근할 수 있다. 사용할 수 있는 연산은 총 5개이다. 1. push 데이터를 stack에 집어넣는다. 2.pop 맨 위의 데이터를 지운다. 3.size 스택의 크기를 반환한다. 4.empty 비어있는지 확인한다. 5.top 맨 위의 데이터를 반환한다. 단, Stack에서 주의해야할 지점은 pop과 top 연산을 할 때 반드시 stack의 크기가 0이 아닌지를 확인해야 한다. 만약, 크기가 0인데 pop시키거나 top연산을 하게 되면 컴파일 에러가 뜨게 된다. 해당하는 방법으로 코드를 구현하면 다음과 같다. 다만, 이 코드에서는 pop과 top연산을 할 때 그 상황에서의 stack의 ..
[백준 2504번] [스택] 괄호의 값스택의 대표적인 문제이다. vector를 활용해서 풀 수도 있으나, 여러가지 측면때문에 stack 헤더를 활용하여 문제를 접근할 수 있다. 사용할 수 있는 연산은 총 5개이다. 1. push 데이터를 stack에 집어넣는다. 2.pop 맨 위의 데이터를 지운다. 3.size 스택의 크기를 반환한다. 4.empty 비어있는지 확인한다. 5.top 맨 위의 데이터를 반환한다. 단, Stack에서 주의해야할 지점은 pop과 top 연산을 할 때 반드시 stack의 크기가 0이 아닌지를 확인해야 한다. 만약, 크기가 0인데 pop시키거나 top연산을 하게 되면 컴파일 에러가 뜨게 된다. 해당하는 방법으로 코드를 구현하면 다음과 같다. 다만, 이 코드에서는 pop과 top연산을 할 때 그 상황에서의 stack의 ..
2020.09.20 -
이 문제는 전형적인 DP문제이다. 다만, 0과 1을 호출하는 갯수를 계산을 하라는 점에서 살짝은 낯설게 느껴질 수 있으나 본질적으로 두 수를 더하는 과정에서 0과 1을 더하는 양상을 각각 구분해서 저장해주는 방식으로 이용해주면 된다는 것을 쉽게 알 수 있다. 이 과정에서 가장 처리가 쉬운 방법이 구조체를 이용하는 것이다. 추가적으로 피보나치의 경우에는, 같은 계산을 매우 반복해서 해야하는 상황이 등장하게 되므로 DP를 이용하여 이미 존재하는 숫자의 경우에는 계산을 하지 않고 바로 return만 시켜주면 된다. 해당하는 방식으로 코드를 구현하면 다음과 같다. #include #include #include #include #include using namespace std; typedef struct{ i..
[백준 1003번] [동적 계획법] 피보나치 함수이 문제는 전형적인 DP문제이다. 다만, 0과 1을 호출하는 갯수를 계산을 하라는 점에서 살짝은 낯설게 느껴질 수 있으나 본질적으로 두 수를 더하는 과정에서 0과 1을 더하는 양상을 각각 구분해서 저장해주는 방식으로 이용해주면 된다는 것을 쉽게 알 수 있다. 이 과정에서 가장 처리가 쉬운 방법이 구조체를 이용하는 것이다. 추가적으로 피보나치의 경우에는, 같은 계산을 매우 반복해서 해야하는 상황이 등장하게 되므로 DP를 이용하여 이미 존재하는 숫자의 경우에는 계산을 하지 않고 바로 return만 시켜주면 된다. 해당하는 방식으로 코드를 구현하면 다음과 같다. #include #include #include #include #include using namespace std; typedef struct{ i..
2020.09.17