# 출처 : https://www.acmicpc.net/problem/6679 처음 내 풀이는 어떤 함수에서 입력으로 들어온 수를 특정 진법으로 변환하고 그 후 리턴하는 함수,리턴받은 수를 자릿수별로 합치는 함수,그리고 최종 결과를 비교하는 함수 총 3가지로 구성하여 풀었으나 풀고보니 풀이가 쓰레기였다.그럴 필요없이 진법 변환의 원리 그러니깐 해당 진법의 수로 나눈 나머지끼리의 합을 이용하면 굳이 string을 쓰거나 하지 않아도 풀 수 있었다.. # 풀이12345678910111213141516171819202122232425#include #include using namespace std; int calc(int num, int base){ int ret = 0; while (num) ret += ..
# 출처 : https://www.acmicpc.net/problem/2193 앞선 2xn 타일링 문제와 마찬가지로 규칙을 찾아 미리 배열 안에 각 N에 해당하는 경우의 수를 담아두고입력받은 N에 대한 값을 꺼내서 출력해주면 된다.여기서 변수 타입을 지정해 주는것이 한가지 독특했던 점이었는데, 처음에 int형으로 풀었더니 틀린것으로 나왔다.디버깅 찍어보니 안에 수들이 깨져있었음(너무 커져서). 따라서 size_t 타입으로 바꿔주고 돌리니 정답으로 나왔다.다른분들의 풀이를 보면 long long을 사용한 분도 있고 다양하더라 # 풀이12345678910111213#include using namespace std;size_t N, cnt[91]; int main(){ ios::sync_with_stdio(..
# 출처 : https://www.acmicpc.net/problem/11726 2xN 크기의 타일에 대해 2x1 타일과 1x2 타일로 채울 수 있는 모든 경우의 수를 계산하는 문제이다.N = 1일때, 2일때 ... 쭉 경우를 열거하여 그 때의 수를 세 보니N = i 번째 일 때의 경우의 수는 (i - 1일때의 경우의 수) + (i - 2일때의 경우의 수) 라는 규칙을 도출해 내었고이를 그대로 구현만 하였다.DP에 관련된 문제는 점화식을 도출 해 내는 등 수학적 관계식을 도출해 내어 푸는것 같은 생각이 점점 든다. # 풀이 : 12345678910111213141516171819202122#include using namespace std;int N, cnt[1001]; int main(){ ios::s..
# 출처 : https://www.acmicpc.net/problem/1920 정렬되어 저장해주기 때문에 따로 정렬을 할 필요가 없는 자료구조 set을 사용하여 풀었다. # 풀이12345678910111213141516171819202122#include #include #include int N, M, num;std::set base;int main(){ std::ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL); std::cin >> N; for (int i = 0; i > num; base.insert(num); } std::cin >> M; for (int i = 0; i > num; std::cout
# 출처 : https://www.acmicpc.net/problem/4963 처음엔 BFS를 써서 풀고자 큐를 사용했으나 뭔가 원하는 방향으로 진행이 되지 않길래스택을 써서 풀었다. 그렇게 풀고 다른 사람들의 답을 보니 재귀를 사용해서 훨씬 간단하게 풀었어서재귀 연습겸 재귀로도 풀어보았다. # 스택 사용12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include #include #include using namespace std; int C, R, cnt;int map[51..
# 출처 : https://www.acmicpc.net/problem/1003 처음에 단순하게 count 변수 두개를 선언해서 0과 1을 호출하는 횟수를 셌는데 시간초과가 났다.따라서 i번째 수의 0과 1의 호출 횟수는 i-1번째의 0과 1, i-2번째의 0과 1 각각의 횟수의 합과 같은 규칙을 찾아처음부터 배열에 담아두는 형식으로 풀었다. # 풀이 1234567891011121314151617181920212223242526272829#include using namespace std; int T, N;int DP[42][2]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); DP[0][0] = 1; DP[0][1] = 0..
# 출처 : https://www.acmicpc.net/problem/2579 이전 칸에서 현재 칸에 도달한 경우를 나눠 계산해 주면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include #include using namespace std; int N; // 각 칸에 할당된 점수vector stairVal; // 현재까지 오는데 계산된 총 점수// 0 : 이전 칸에서 2칸 건너 현재 칸에 도달// 1 : 이전 칸에서 1칸 건너 현재 칸에 도달int stackedVal[300][2]; int main(){ ios::sync_with_stdio(false);..