개발 지식/알고리즘
[백준 C] 10818번 동적할당으로 풀기
Prcnsi
2021. 6. 14. 02:00
728x90
이 문제는 최대,최소를 구하는 문제이다.
코드는 아래와 같다.
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
|
#include<stdio.h>
#include<stdlib.h>
int main() {
int n, max,low;
scanf("%d", &n);
int* arr = NULL;
arr = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
max = *arr;
low = *arr;
for (int i = 0; i < n - 1; i++)
{
if (arr[i] < arr[i + 1])
{
if (arr[i + 1] > max) {
max = arr[i + 1];
}
if (arr[i] < low) {
low = arr[i];
}
}
else {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i+1] < low) {
low = arr[i+1];
}
}
}
printf("%d %d", low, max);
free(arr);
}
|
cs |
처음에 14번째 줄의 for문에서 (int i=0;i<n;i++)을 해서 런타임에러 오류가 났는데
알고보니 배열의 크기를 넘어서서 오류가 난 것이었다.
그래서 n-1을 하니까 풀렸다.
굳이 동적할당을 쓸 필요는 없는 문제였지만 동적할당을 배운지 얼마 되지 않아
복습할겸 써보았다.
위 문제를 풀면서 포인터를 배열처럼 사용한다는 것의 의미는 배열자체가 연속된 메모리의 할당이므로
바로 포인터++을 하거나 포인터의 인덱스를 바꾸는 것은 자료형의 크기만큼 이동해주므로
배열과 비슷한 역할을 한다는 것이다.
728x90