24-2 SISS/C언어
[SISS/C언어 스터디] 2학기 2주차 스터디
noname64
2024. 9. 14. 21:30
자율 2문제를 풀어서 제출하면 됩니다.
언어는 C언어만 가능합니다.
레벨 제한사항: Silver 5 이상
12865
- 동적 프로그래밍 → 배낭에 넣을 수 있는 물건의 최대 가치 합을 출력
- 참고 링크 → https://cotak.tistory.com/38
// 12865.c
#include <stdio.h>
// 물건 개수, 최대 무게
int n, k;
// 각갹의 무게 및 가치
int w[101], v[101];
// dp 테이블
int dp[101][100001];
int main()
{
int i, j;
// 물건 개수, 최대 무게 입력
scanf("%d %d", &n, &k);
// 각각의 물건 입력
for (i = 1; i <= n; i++)
{
scanf("%d %d", &w[i], &v[i]);
}
// dp
for (i = 1; i <= n; i++)
{
for (j = 1; j <= k; j++)
{
// 무게가 더 클 경우
if (j < w[i])
{
// 이전 값
dp[i][j] = dp[i - 1][j];
}
// 무게가 같거나 작을 경우
else
{
// 이전 값과 현재 값 중 큰 값을 저장
dp[i][j] = dp[i - 1][j] > dp[i - 1][j - w[i]] + v[i] ? dp[i - 1][j] : dp[i - 1][j - w[i]] + v[i];
}
}
}
printf("%d\n", dp[n][k]);
return 0;
}
1991
- 트리 순회 → 입력받은 이진트리의 전위, 중위, 후위 순회 결과를 출력
// 1991.c
#include <stdio.h>
// 노드 개수
int n;
// 트리
int tree[26][2];
// 전위 순회
void preorder(int node)
{
// 노드가 없으면 종료
if (node == -1)
{
return;
}
// 노드 출력
printf("%c", node + 'A');
// 왼쪽 자식
preorder(tree[node][0]);
// 오른쪽 자식
preorder(tree[node][1]);
}
// 중위 순회
void inorder(int node)
{
// 노드가 없으면 종료
if (node == -1)
{
return;
}
// 왼쪽 자식
inorder(tree[node][0]);
// 노드 출력
printf("%c", node + 'A');
// 오른쪽 자식
inorder(tree[node][1]);
}
// 후위 순회
void postorder(int node)
{
// 노드가 없으면 종료
if (node == -1)
{
return;
}
// 왼쪽 자식
postorder(tree[node][0]);
// 오른쪽 자식
postorder(tree[node][1]);
// 노드 출력
printf("%c", node + 'A');
}
int main()
{
int i;
char a, b, c;
// 노드 개수 입력
scanf("%d", &n);
// 트리 초기화
for (i = 0; i < n; i++)
{
tree[i][0] = tree[i][1] = -1;
}
// 트리 입력
for (i = 0; i < n; i++)
{
// 노드, 왼쪽 자식, 오른쪽 자식 입력
scanf(" %c %c %c", &a, &b, &c);
// 왼쪽 자식
if (b != '.')
{
tree[a - 'A'][0] = b - 'A';
}
// 오른쪽 자식
if (c != '.')
{
tree[a - 'A'][1] = c - 'A';
}
}
// 전위 순회
preorder(0);
printf("\n");
// 중위 순회
inorder(0);
printf("\n");
// 후위 순회
postorder(0);
printf("\n");
return 0;
}