쉬운 문제이지만, 처음 알게 된 지식이 있어 글을 적습니다.
여러분은 배열을 함수 내에서 선언하는 것과 함수 밖에서 선언하는 것의 차이를 아시나요?
전역 변수 / 지역 변수 말고 다른 부분에서요..
함수 내에서 선언하는 것은 stack 영역에 할당하게 되고,
전역이나 static 으로 선언하는 경우는 data 영역에 할당하게 된다고 합니다.
#include <stdio.h>
int main(void)
{
int result[20000001];
int n;
scanf("%d", &n);
int k;
for (int i = 0; i < 20000001; i++)
{
result[i] = 0;
}
for (int i = 0; i < n; i++)
{
scanf("%d", &k);
result[k + 10000000]++;
}
int m;
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
int j;
scanf("%d", &j);
printf("%d ", result[j + 10000000]);
}
printf("\n");
return 0;
}
처음에 이렇게 작성하고 실행하는데 segmentation fault 가 계속 떠서 왜그런지 찾아보니까
지역변수에서 크기가 큰 배열을 생성하면 segmentation fault 가 발생하므로,
전역변수로 선언해줘야 한다는 것을 알았습니다.
그래서 배열 선언을 전역으로 해주었더니 바로 해결되었습니다.
앞으로 크기가 큰 배열은 전역으로 선언하는 습관을 들여야 할 것 같습니다.
전체 코드)
#include <stdio.h>
int result[20000001];
int main(void)
{
int n;
scanf("%d", &n);
int k;
for (int i = 0; i < 20000001; i++)
{
result[i] = 0;
}
for (int i = 0; i < n; i++)
{
scanf("%d", &k);
result[k + 10000000]++;
}
int m;
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
int j;
scanf("%d", &j);
printf("%d ", result[j + 10000000]);
}
printf("\n");
return 0;
}
'백준 > c' 카테고리의 다른 글
백준_1654_랜선자르기 (0) | 2024.05.14 |
---|---|
백준_1929_소수구하기 (0) | 2024.05.12 |
백준_2839_설탕배달 (0) | 2024.05.08 |
백준_24511_queuestack (0) | 2024.05.08 |
백준_12789_도키도키간식드리미 (0) | 2024.05.06 |