개발 지식/알고리즘

[백준 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