본문 바로가기

실버 II15

[백준 15666] N과 M (12) [C] 풀이 "백준 15664, N과 M (10)"에서 기존에 i번째 요소를 사용했는지를 확인하기 위해 사용한 check를 빼면 해결할 수 있다. 소스코드 #include #include int N, M, arr[8], visited[8]; int compare(const void *a, const void *b){ return *(int*)a - *(int*)b; } void BT(int depth, int start){ for (int i = start, temp = 0; i < N; i++) if (temp != arr[i]){ temp = visited[depth] = arr[i]; if (depth + 1 == M){ for (int idx = 0; idx < M; idx++) printf("%d ",.. 2021. 8. 18.
[백준 15665] N과 M (11) [C] 풀이 "백준 15663, N과 M (9)"에서 기존에 i번째 요소를 사용했는지를 확인하기 위해 사용한 check를 빼면 해결할 수 있다. 소스코드 #include #include int N, M, arr[7], visited[7]; int compare(const void *a, const void *b){ return *(int*)a - *(int*)b; } void BT(int depth){ for (int i = 0, temp = 0; i < N; i++) if (temp != arr[i]){ temp = visited[depth] = arr[i]; if (depth + 1 == M){ for (int idx = 0; idx < M; idx++) printf("%d ", visited[idx]); .. 2021. 8. 18.
[백준 15664] N과 M (10) [C] 풀이 "백준 15663, N과 M (9)"를 참고해서 풀이했다. 요소의 중복은 temp와 check로 관리가 가능하니, 이전에 사용했던 요소의 인덱스를 탐색 시작점으로 이용하면 된다. 소스코드 #include #include #include bool check[8]; int N, M, arr[8], visited[8]; int compare(const void *a, const void *b){ return *(int*)a - *(int*)b; } void BT(int depth, int start){ for (int i = start, temp = 0; i < N; i++) if (!check[i] && temp != arr[i]){ temp = visited[depth] = arr[i]; check[.. 2021. 8. 18.
[백준 15663] N과 M (9) [C] 풀이 기존에 풀이하던 방식은 단순히 중복을 허용하거나 하지 않는 방식이라 이번 문제를 풀이하기에는 적합하지 않다. 때문에, 기존에 i번째 요소를 사용했는지, 기존에 사용한 숫자와 현재 사용하고자 하는 숫자가 다른지 확인하는 방식으로 풀이했다. 소스코드 #include #include #include bool check[8]; int N, M, arr[8], visited[8]; int compare(const void *a, const void *b){ return *(int*)a - *(int*)b; } void BT(int depth){ for (int i = 0, temp = 0; i < N; i++) if (!check[i] && temp != arr[i]){ temp = visited[depth.. 2021. 8. 17.
[백준 15988] 1, 2, 3 더하기 3 [C] 풀이 "백준 9095, 1, 2, 3 더하기"의 확장 문제이다. 1e6 까지 미리 구해놓자. 소스코드 #include const int MOD = 1e9+9; int dp[1000001] = {1, 2, 4}; int main(){ for (int i = 3; i < 1000001; i++) dp[i] = ((dp[i-1]+dp[i-2])%MOD +dp[i-3]) %MOD; int N, T; for (scanf("%d", &T); T--;){ scanf("%d", &N); printf("%d\n", dp[N-1]); } } 출처 및 참고자료 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. .. 2021. 8. 16.
[백준 1788] 피보나치 수의 확장 [C] 풀이 F(1) = 1 = F(0) + F(-1), F(-1) = 1 F(0) = 0 = F(-1) + F(-2), F(-2) = -1 F(-1) = 1 = F(-2) + F(-3), F(-3) = 2 F(-2) = -1 = F(-3) + F(-4), F(-4) = -3 F(-3) = 2 = F(-4) + F(-5), F(-5) = 5 n이 음수이고, 짝수일때만, F(n)이 -1이다. 소스코드 #include int main(){ int n, op = 1; long long dp[2] = {0, 1}; scanf("%d", &n); if (n = 2){ for (int i = 1; i.. 2021. 8. 10.