문제 링크: 1292번: 쉽게 푸는 문제 (acmicpc.net)
1292번: 쉽게 푸는 문제
첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.
www.acmicpc.net

코드 구상

작성 코드
#include <stdio.h>
int main() {
int A, B, k = 1, sum = 0;
scanf("%d %d", &A, &B);
int arr[1001];
arr[0] = 0;
for(int i = 1; i <= B; i++) {
for(int j = 1; j <= i; j++) {
arr[k] = i;
if(k>1000){
break;
}
k++;
}
}
for(int i = A; i <= B; i++) {
sum += arr[i];
}
printf("%d", sum);
return 0;
}
알아간 점
1. 파이썬은 동적 배열의 특징을 갖는다
- 이 문제는 파이썬으로 먼저 푼 후 C언어로 풀었는데, 파이썬에서는 따로 리스트의 크기를 신경쓰지 않고 코드를 짰었다.(파이썬으로 푼 코드: [백준/파이썬] #1292 쉽게 푸는 문제 (tistory.com)) C언어로 실행시켰을 때 자꾸만 런타임 에러가 떠서 문제가 뭔지 열심히 찾아봤다.. 분명 코드는 틀리지 않은 것 같았는데 말이다. 문제는 처음에 수열을 만드는 반복문에서 if문(k>1000)을 작성하지 않았기에 계속 오류가 뜬 것이다. 파이썬에서는 작성하지 않았기에 C언어를 풀 때도 생각을 안하고 있었다. 인덱스에 대한 제한을 설정하니 드디어 성공이 떴다......
- 파이썬은 리스트가 동적 배열 특징을 갖고 있다. 가변적인 크기를 갖는데, 초기값을 작게 잡고 필요에 따라 크기를 동적으로 조절한다. 따라서 이 문제를 파이썬으로 풀 때는 굳이 리스트 크기 값을 설정해 둘 필요가 없었다.
- C언어 배열 같은 경우 일반적으로 정적으로 할당된다.( C언어에서의 동적 배열은 포인터로 구현해야 한다.) 따라서 배열의 크기를 초과하는 인덱스에 접근하려고 하면 오류가 날 수 있다 !! ㅜㅜ (런타임 에러가 난 이유..)
- 분명 동적/정적 배열..수업 시간에 배웠던 내용이다. 그땐 이해를 하기보단 그냥 암기하고 지나갔던 것 같은데 이렇게 오류를 통해서 직접 경험해보고 이해하니 훨씬 좋은 듯하다.
'백준 문제풀이 > C언어' 카테고리의 다른 글
| [백준/C언어] #1065 한수 (0) | 2024.02.23 |
|---|---|
| [백준/C언어] #2846 오르막길 (0) | 2024.02.09 |
| [백준/C언어] #2869 달팽이는 올라가고 싶다 (1) | 2024.02.07 |
| [백준/C언어] #4344 평균은 넘겠지 (0) | 2024.02.04 |