Iriton's log
[C] 11047번: 동전 0 // C6011: NULL 포인터 ' '을(를) 역참조하고 있습니다. 본문
Problem Solving/C,C++
[C] 11047번: 동전 0 // C6011: NULL 포인터 ' '을(를) 역참조하고 있습니다.
Iriton 2023. 5. 17. 13:39문제
준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
출력
첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.
풀이
1. 오름차순으로 주어지기 때문에 입력값을 배열에 저장한다.
2. i를 배열의 길이 즉, 배열의 맨 뒤 인덱스로 둔다.
3. K가 배열[i]보다 클 경우에만 K-배열[i]를 진행하며 count한다.
4. 작을 경우에는 i 인덱스를 1씩 줄인다.
초기 코드
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main(void)
{
int answer = 0; //count 횟수 저장
int N, K;
scanf_s("%d %d", &N, &K);
int* arr = (int*)malloc(sizeof(int) * N); //N 사이즈만큼 int형 동적 배열 생성
for (int i = 0; i < N; i++)
scanf_s("%d", &arr[i]);
int idx = N - 1; //배열 맨 끝 인덱스 지정
while (K > 0) { //K가 0이 됨은 값이 완성될 때를 의미
if (arr[idx] > K) //현재 K값보다 큰 값이라면 idx를 줄여서 작은 값으로 반복
idx--;
else { //작거나 같은 값이라면 - 연산, count 증가
K -= arr[idx];
answer++;
}
}
free(arr); //배열 반환
printf("%d", answer);
return 0;
}
정상적으로 실행되는 코드이지만,
동적 배열 포인터가 NULL값을 가리키면 잘못된 접근으로 인해 오류가 생길 수 있으니
이를 검사하는 코드가 필요하다.
if ( arr ) // 또는 arr!=NULL
{
*arr = '\0'; //값 대입
// code ...
free( p );
최종 코드
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main(void)
{
int answer = 0;
int N, K;
scanf_s("%d %d", &N, &K);
int* arr = (int*)malloc(sizeof(int) * N);
for (int i = 0; i < N; i++)
scanf_s("%d", &arr[i]);
int idx = N - 1;
if (arr != NULL) {
*arr = '\0';
for (int i = 0; i < N; i++)
scanf_s("%d", &arr[i]);
int idx = N - 1;
while (K > 0) {
if (arr[idx] > K)
idx--;
else {
K -= arr[idx];
answer++;
}
}
}
free(arr);
printf("%d", answer);
return 0;
}
오류를 감안하여 검사 코드를 추가한 최종 코드는 위와 같다.
Error Message: NULL 포인터 ' '을(를) 역참조하고 있습니다.
해당 오류 참고 자료
'Problem Solving > C,C++' 카테고리의 다른 글
[C++/BOJ] 2212번: 센서 (0) | 2023.05.31 |
---|---|
[C] 9095번: 1, 2, 3 더하기 (0) | 2023.05.17 |
[C] 1697번: 숨바꼭질 (0) | 2023.05.10 |
[C] 4716번: 풍선 (0) | 2023.05.10 |
[C++/Baekjoon] 2243번: 사탕상자 (0) | 2023.05.03 |
Comments