본문 바로가기

분류 전체보기

(30)
[백준] C++ 9095번 : 1, 2, 3 더하기 풀이과정 1. 재귀 함수를 사용한다. 재귀함수의 인자인 값(currN)이 입력 받은 정수(N)와 같을 때까지 1,2,3만큼 증가시킨다. 인자의 값(currN)이 입력받은 정수 N과 같다면 횟수를 1 증가시켜 반환한다. currN이 N보다 크다면 0을 반환한다. 2. dp를 사용한다. 점화식은 f(1) = 1, f(2) = 2, f(3) = 4, 이후는 f(n) = f(n-1) + f(n-2) + f(n-3)이다. 코드 재귀 더보기 #include #include using namespace std; int Func(int N,int currN, int iCount) { if (N < currN) return 0; if (currN == N) return iCount+1; return Func(N, cur..
[백준] C++ 1463번 : 1로 만들기 풀이과정 재귀 함수를 사용해서 N%3==0, N%2==0 외에도 N-1 %3 ==0 , N-1 %2 ==0 , N-2 %3 ==0 의 경우도 고려하여 재귀함수를 작성한다. 코드 재귀 더보기 #include using namespace std; int iCount = 0; void Func(int N, int count) { if (iCount != 0 && count > iCount) return; if (N == 1) { if (iCount == 0) iCount = count; if (iCount > count) iCount = count; } else { if (N % 3 == 0) Func(N/3, count+1); if (N % 2 == 0) Func(N/2, count+1); if (((N -..
[백준] C++ 1966번 : 프린터 큐 풀이과정 내용 코드 코드1(정렬된 vector로 우선순위 나타냄) 더보기 #include #include #include #include #include using namespace std; int main() { int iCaseNum = 0; cin >> iCaseNum; for (int i = 0; i > iInputSize >> iTargetPos; for (int i = 0; i > iValue; q.pu..
[백준] C++ 10845번 : 큐 풀이과정 N개의 문자열을 입력받아 vector v에 저장한다. push의 경우 입력할 값이 주어지기 때문에 if문을 사용해서 입력을 한 번 더 받는다. v에 입력된 값에 맞게 명령을 수행한다. 코드 #include #include #include #include using namespace std; int main() { queue q; vector v; int iInputSize = 0; cin >> iInputSize; cin.ignore(); v.reserve(iInputSize); for (int i = 0; i > s; v.push_back(s); if (s == "push") { cin >> s; v.push_back(s); } ..
[백준] C++ 2504번 : 괄호의 값 풀이과정 1. 입력받은 문자가 '('나 '['면 스택에 push 한다. 결과값은 벡터에 저장한다. (벡터의0번째 = 최종 결과값, 그 외 = 곱셈연산 내부 결과값 저장) 2. ')'일 때, 스택의 top이 '['가 아닌 경우 아래를 수행한다. - 이전에 입력한 문자가 '('라면 "()"로 2의 값을 갖고, 스택에서 pop 한 후 결과(iResult)값에 2를 더한다. - 이전에 입력한 문자가 '('가 아니라면 '(X)'로 2*X값을 수행한다. * 스택의 사이즈가 0이라면 vector의 0번째에 2를 더한다. * 스택의 사이즈가 1이라면 곱셈 연산이 있으므로 벡터의 스택 사이즈 번째(v.at( st.size() ) )에 2를 곱한 후 v.at( st.size()-1 )에 저장한다. 위의 과정을 반복한 후 ..
[백준] C++ 1874번 : 스택 수열 풀이과정 첫 줄에 입력받은 N(iInput) 만큼 입력받아 벡터(v1)에 저장한다. 1부터 N까지 스택(st)에 push하면서 벡터(v1)의 처음 값부터 비교한다. 스택(st)의 top이 비교할 값과 같다면 스택(st)에서 pop해주고 다음 값을 비교한다. push할 때 '+', pop할 때 '-'를 벡터(v2)에 추가한다. 입력받은 값들이 스택으로 표현할 수 있다면 스택(st)은 empty 상태이므로 벡터(v2)의 값들을 출력해준다. 그렇지 않을 경우 "NO"를 출력한다. 코드 더보기 #include #include #include #include using namespace std; int main() { int iInput = 0, iNum = 0;; vector v; stack st; vector..
[백준] C++ 10799번 : 쇠막대기 풀이과정 입력받은 문자를 stack에 저장한다. 입력받은 문자가 ')'일 때, 직전에 입력받은 문자가 '('라면 레이저를 나타내고, ')'라면 막대기가 끝났음을 나타낸다. '(' 입력 -> stack에 추가 ')' 입력 : 1. 직전이 '(' (레이저) -> stack의 사이즈만큼 잘려진 조각 수 증가 2. 직전이 ')' (쇠막대기 끝남) -> 잘려진 조각 수 +1 증가 코드 더보기 #include #include #include using namespace std; int main() { string s = ""; stack st; int iCount = 0; cin >> s; for (int i = 0; i < s.length(); ++i) { if (s[i] == '(') st.push(s[i]);..
[백준] C++ 9012번 : 괄호 풀이과정 입력받은 문자열의 각 문자를 검사해서 '('일 때 push 하고, ')'일 때 스택의 맨 위의 값이 ')'일 때 pop 한다. 모든 문자 입력 후 스택이 비어있으면 YES를 비어잇지 않다면 NO를 출력한다. 코드 #include #include #include #include using namespace std; int main() { int iSize = 0; cin >> iSize; for (int i = 0; i > s; for (int j = 0; j < s.length(); ++j) { if (st.empty() || s[j] == '(') st.push(s[j]); else if (st.top() == '(') ..