본문 바로가기

알고리즘

(179)
[2257번] 화학식량 (스택 풀이) 지난 번, 재귀함수 풀이에 이어서 스택 풀이입니다. 문제 접근법. 1. 괄호에 대해서 먼저 연산을 할 필요가 있다. 2. 숫자가 있는 경우, 앞에 있는 문자나 괄호식에 대해서 곱셈을 해줘야 한다. 괄호와 같은 우선 순위가 필요한 연산일 경우, 적합한 자료구조는 스택입니다. 스택을 이용해서, 특정 우선 순위에 대해서 먼저 처리해주는 것이 필요합니다. H, C, O에 대해서는 해당하는 숫자(1, 14, 16)를 넣어줍니다. (은 우선순위 연산을 위해서 사용되므로, 그대로 넣어줍니다. )의 경우에는 (를 만날 때까지 만나는 숫자들을 모두 더하도록 처리합니다. 숫자의 경우에는 스택의 Top에 대해서 곱셈을 처리해서, *다시 숫자를 넣어줍니다. * )의 경우에 모든 숫자를 더할 수 있는 이유는, 스택에 들어가는 ..
[2257번] 화학식량(재귀함수 풀이) 이 문제는 스택으로 풀 수도 있다고 한다. 이번 해설에서는 재귀함수를 통해서 설명하겠다. 문제접근법. 1. 한 문자가 무엇인지에 따라서, 알맞는 연산의 과정이 필요 2. 괄호가 등장했을 때, 특별한 연산이 필요 이 두 가지에 초점을 맞춰서 재귀 함수를 구성하면 된다. 1번은 알파벳 두개가 연달아 나왔을 때와, 숫자가 나왔을 때를 생각해주면 조건문을 작성할 수 있다. 2번은 좀 까다롭다. 예시는 다음과 같다. (H(O2)3)2를 보면, 괄호가 두 개 나와 있다. 괄호가 두 개 이상있을 때 방법을 생각하는게 문제의 핵심이다. 괄호가 열리기 전까지 연산된 값을 기록해두고 괄호가 닫히면 기록된 값을 이용해서 연산을 진행하면 문제를 해결할 수 있다. 해설 코드(C++) 1 2 3 4 5 6 7 8 9 10 11 ..
[2961번]도영이가 만든 맛있는 음식 문제 접근법. - 모든 요리의 조합을 체크해야 한다. - 특정 요리 조합마다 연산을 하는 것은 시간 초과가 발생한다. - 이전 조합의 결과값을 이용해서 연산을 빠르게 하고 싶다. 코드 해설(C++). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include #include #include using namespace std; int check[11] = { 0 }; int N; long long sb[11][2]; long long t_s = 1, t_b = 0; int answer = 0; void recur(int n, in..