• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

단순한 질문이지만..

19.08.07 23:12 작성 조회수 241

0

안녕하세요. cpp, 알고리즘 모두 처음 접하지만 좋은 강의 잘 듣고있습니다.

2 line에 int cnt[50001];을 main함수 안에 안하고 밖에다가 선언하는 이유를 알 수 있을까요?

 

감사합니다.

답변 4

·

답변을 작성해보세요.

2

acoustic0419님이 알려주신대로 하면 됩니다, 단 0으로 초기화할때만 사용해야 합니다.

또 다른 방법은

int ch[100];

memset(ch, 0, sizeof(ch)) 이렇게 하면 ch배열의 값을 0으로 초기화합니다.  0으로 초기화 할때만 사용하시기 바랍니다.

특정값으로 초기화 하고 싶을 때는 벡터를 사용하시기 바랍니다.

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("input.txt", "rt", stdin);
	int n;
	cin>>n;
	for(int i=0; i<n; i++){
		vector<int> ch(10, 100); //사이즈 10에 모든값을 100으로 초기화합니다.
		for(auto x : ch) cout<<x<<" ";
		cout<<endl;
		for(int j=0; j<10; j++){
			ch[j]=3;
		}
		for(auto x : ch) cout<<x<<" ";
		cout<<endl;
	}
	return 0;
}

위 코드처럼 #include<bits/stdc++.h>를 사용하시려면 DEV-c++의 컴파일러를 업그레드 해야 합니다. 

메뉴에서 도구-컴파일러 설정에 들어가 "컴파일러 추가명령"에 체크하고, -std=c++14 를 적어주시면 됩니다.

0

acoustic0419님의 프로필

acoustic0419

2020.01.04

a[100] = {0,}; 같은 방법으로 모두 0으로 초기화 가능합니다.

0

냉콩국수님의 프로필

냉콩국수

2019.11.03

연장선 상에서 같은 질문을 하나 드리고 싶습니다.

코테 문제들 풀다보면, 여러 테스트 케이스를 체크하는 코드를 직접 작성해야하는 경우들이 있던데, 그러다보면 첫번째 테스트케이스가 끝나고, 두번째 케이스가 시작할 때 사용했던 변수들을 모두 0으로 초기화시켜야하는 경우들이 있습니다.

이 경우에, 특히 배열같은 것은 매번 새로운 테스트 케이스를 시작할 때마다 for문으로 하나하나 초기화하는 방법밖에 없는지 궁금하여 댓글을 남깁니다.

혹 올림피아드나 코테 응시자들이 자주 쓰는 별도의 스킬같은게 있을까 싶어서요.^^ 

0

좋게 봐주셔서 감사합니다.

main() 함수 밖에다 선언을 하면 전역변수가 됩니다. 전역변수는 기본적으로 배열의 값이 0으로 초기화 됩니다. 그리고 main()함수 이외의 함수에서도 접근이 가능하고요.

main()함수 안에 변수를 선언하면 main()함수의 지역변수가 되는데 지역변수는 컴파일러에 따라서 변수값이 0으로 초기화 되기도 하지만 의미없는 값(쓰레기값)으로 초기화 되기도 합니다.

즉 배열을 전역변수로 선언하는 것은 기본적으로 그 배열의 값을 0으로 초기화하고 싶어서 그렇게 쓴 것입니다.