본문 바로가기

Algorithm/백준15

백준 1759 암호 만들기 - C++ 접근 이전에 풀었던 N과 M 문제와 매우 유사하다 다만 조건이 모음과 자음의 개수에 따라 결과가 달라지는 것 정도 우선, 위에 보이는 출력 처럼 문자를 오름차순으로 보여주려면 입력 받은 값에 대해 정렬을 하고 시작하면 빠르다. 입력된 문자가 정렬 되었다면 이제 조건에 만족하는 경우의 수를 구해준다. * 조건은 중복 없이 오름차순이고 만들어진 문자열은 모음 1개 이상 자음 2개 이상을 포함한다. #include #include #include using namespace std; map vowel; int L, C; char alpha[15]; char arr[15]; void re(int idx, int begin, int vowelCnt){ if(idx == L){ int consonant = L-vo.. 2020. 7. 17.
백준 9095 1, 2, 3 더하기 - C++ 접근 해당 문제는 DP로 푸는 방법과 모든 경우의 수를 구해서 푸는 방법이 있다. 먼저, DP로 푸는 방법은 다음과 같다. 해당 문제는 어떠한 N을 1,2,3의 합으로만 구해야 한다. N은 4이상이고 10이하의 경우 N은 N-1의 경우의 수 +1, N-2의 경우의 수 +2, N-3의 경우의 수 +3을 하게 되면 N이 가질 수 있는 경우의 수가 나오게 된다. 즉 N이 가질 수 있는 경우의 수는 (N-1의 경우의 수) + (N-2의 경우의 수) + (N-3의 경우의 수) 가 된다. 코드는 다음과 같다. #include using namespace std; int dp[11]; int main(){ int total; cin >> total; dp[1]=1, dp[2]=2, dp[3]=4; while(tota.. 2020. 7. 16.
백준 15663 N과 M(9) - C++ 전체적인 흐름 주어진 N에 대해서 입력 받은 배열을 오름차순으로 정렬한다.(사전 순으로 증가하는 순서로 출력하기 위해) N개 있는 배열에서 M개를 뽑아 만들 수 있는 경우의 수를 모두 구한다. 여기서 이전에 사용한 수는 사용하면 안되며 똑같은 수열을 만드는 경우는 피해야 한다. 예제 만약 1 1 3 4 5 라는 입력이 있다고 했을 때 이번 문제에서 요구하는 출력은 1 1 1 3 1 4 1 5 3 1 3 4 3 5 4 1 4 3 4 5 5 1 5 3 5 4 이다. 배열 인덱스 0과 1에서 1 1이 존재하는데 경우의 수를 구하다 보면 1 1이 나오고 또 1 1이 나오는데 두 개는 같은 의미이므로 같은 수열이 나온다면 하나만 출력해주면 된다. 풀이 그래서 이것을 똑같은 수열이 나오는지 어떻게 판별할 것인가를 .. 2020. 7. 14.