문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
코드
#include <iostream>
using namespace std;
int arr[1000001];
int main(){
int n;
cin >> n;
arr[2] = 1;
arr[3] = 1;
for(int i=4; i<=n; i++){
arr[i] = arr[i-1]+1;
if(i%3 == 0 && arr[i/3]+1<arr[i]){
arr[i] = arr[i/3]+1;
}
if(i%2 == 0 && arr[i/2]+1<arr[i]){
arr[i] = arr[i/2]+1;
}
}
cout << arr[n];
return 0;
}
정리
처음에 arr을 main함수 안에 지역변수로 설정했더니 visual stuido code에서 코드가 실행되지 않았다. 그러나 전역변수로 설정했더니 잘 실행이 되었다. 왜 그런지 궁금해서 찾아보았다.
지역변수는 stack 영역에 할당되고 전역변수는 data 영역에 할당된다.
기본적으로 운영체제는 성능 상의 이유로 stack 영역에서 더 타이트하게 메모리 제한을 걸어버린다.
그래서 visual studio code에서 지역변수로 꽤 큰 용량의 변수를 선언하면 메모리 제한에 걸려 런타임 에러가 발생한다.
백준에서는 stack 영역에 별도의 메모리 제한이 존재하지 않아 지역변수에 꽤 큰 용량의 변수를 선언하여도 잘 실행이 된다. 그래도 내가 코드를 작성하는 곳은 vs code이기 때문에 웬만해서는 꽤 큰 용량의 변수면 전역변수로 선언해야겠다.
참조
'Beakjoon > dynamic programming' 카테고리의 다른 글
[백준] 1699번 제곱수의 합 (C++) - dynamic programming (0) | 2022.01.26 |
---|---|
[백준] 1912번 연속합 (C++) - dynamic programming (0) | 2022.01.26 |
[백준] 15990번 1, 2, 3 더하기 5 (C++) - dynamic programming (0) | 2022.01.24 |
[백준] 11052번 카드 구매하기 (C++) - dynamic programming (0) | 2022.01.23 |
[백준] 1003번 피보나치 함수 (C++) - dynamic programming (0) | 2022.01.21 |