8주차 개념강의 - 3653번 질문입니다.
411
작성한 질문수 22
http://boj.kr/4bf036e939474a3a89f75c5f0163382c
같은 로직의 코드여도 벡터를 넘겨서 트리를 만들면 시간 초과가 발생합니다.
벡터를 선언하고 초기화하는 게 시간복잡도에 영향을 많이 미치나요?
답변 1
1
안녕하세요 yeon님 ㅎㅎ
일단 다음과 같은 차이점은 존재합니다.
전역변수보다는 지역변수로 하는게 더 좋습니다. 지역변수는 stack에 할당이 되고 쓰레기값이 할당이 됩니다. 전역변수는 bss segement 또는 data segment에 들어가면서 값을 초기화 하지 않은 경우 0으로 초기화가 됩니다.
지역변수로 선언하게 되면 stack에 쌓이는데 이 때 OS에서 성능상의 이유로 stack 영역에 메모리 제한을 걸어버립니다. 그렇기 때문에 많은 배열을 선언하지 못합니다. 다음과 같은 코드를 볼까요? 전역변수와 지역변수로 선언한 똑같은 tree인데 지역변수로 선언한 tree는 문제가 생겨서 아래의 로직이 실행되지 않습니다.
#include<bits/stdc++.h>
using namespace std;
int a, b;
int tree[10000000]; // 잘 됨.
int main(){
// 잘되지 않음 : int tree[10000000];
cin >> a >> b;
}vector를 TC마다 선언하거나 선언해놓고 초기화하는 차이는 미비하나 선언하고 초기화하는 것이 캐싱상 더 좋습니다.
그리고 제가 yeon님의 방식으로 코드를 구축해봤는데요. 시간초과는 뜨지 않습니다. 참고 부탁드려요.
http://boj.kr/c2c20f6173954265acbf204110667e75
또 질문 있으시면 언제든지 질문 부탁드립니다.
감사합니다.
강사 큰돌 올림.
0
답변 감사합니다! tree를 벡터에서 배열로 바꿨더니 해결이 되어서 이 문제 때문에 시간초과가 났었나 했는데 아니었군요.. 선생님 코드 보면서 원인이 무엇인지 다시 찾아보겠습니다. 감사합니다!
1-E질문입니다!
0
518
2
3-L 틀린 부분 피드백 부탁드립니다.
0
822
2
1-A문제 순열재귀함수 질문입니다.
0
385
1
1-A 일곱난쟁이문제입니다
0
457
1
문제 풀 때 방향성에 대해
0
801
1
맥에서 vs code로 실행 관련 질문입니다
0
523
1
17071번 메모리 초과
0
386
1
1-C질문입니다!
0
421
2
2-B BFS 시간초과질문
0
630
2
1-O 13번 라인
0
442
1
6-J 놀이공원 문제 질문
0
381
1
구현관련 질문
0
484
1
강의 교안
0
319
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
536
1
1-K
0
473
2
3-G번 질문있습니다.
1
474
3
3-C 실행 시간 질문드립니다.
0
494
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
435
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
334
1
3-O go 함수 질문 드립니다.
1
447
2
4-A 출력 질문
0
305
1
1주차 1-O 질문드립니다
0
259
1





