• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

19번) 동적할당으로 배열 선언시 시간초과 질문

20.07.23 16:51 작성 조회수 186

0

#include <iostream>

using namespace std;

int main(void){

int N,i,j,ct=0;

cin>>N;

int height[N];

for(i=0;i<N;i++) //한 줄의 정보를 입력받음 

cin>>height[i];

for(i=0;i<N-1;i++){ //분노 유발자 수를 탐색 

for(j=i+1;j<N;j++){

if(height[i]<=height[j]) //뒤의 학생이 더 큰 경우 분노유발자가 아님 

break;

}

if(j==N) ct++; //뒤의 모든 학생보다 키가 큰 경우 분노유발자 

}

cout<<ct;

return 0; 

}

안녕하세요 19번을 해결하던 중에 질문이 있어서 글을 올리게 되었습니다. 제가 최종적으로 100점을 맞은 코드는 위와 같습니다. 하지만 원래 height 배열을 포인터 변수로 선언하였고, new를 사용한 동적할당으로 문제를 해결하려 했지만, 시간 초과로 인해 0점이 나옵니다. 아래 코드가 0점 코드인데 무엇이 문제인지 설명 부탁드려도 될까요?

#include <iostream>

using namespace std;

int main(void){

int N,i,j,ct=0;

int *height;

cin>>N;

height=new int(N);

for(i=0;i<N;i++) //한 줄의 정보를 입력받음 

cin>>height[i];

for(i=0;i<N-1;i++){ //분노 유발자 수를 탐색 

for(j=i+1;j<N;j++){

if(height[i]<=height[j]) //뒤의 학생이 더 큰 경우 분노유발자가 아님 

break;

}

if(j==N) ct++; //뒤의 모든 학생보다 키가 큰 경우 분노유발자 

}

cout<<ct;

delete height;

return 0; 

}

답변 1

답변을 작성해보세요.

0

안녕하세요. 배열생성은 대괄호입니다. height=new int[N];

참고로

cin>>N;

int height[N];

이 방법은 배열을 정적으로 선언하는 방법으로 컴파일 타임에 배열이 메모리에 할당됩니다. 컴파일 타임에는 N값을 알 수 없으니 에러가 나야 하지만 gcc 컴파일러가 c99를 지원해서 에러없이 동작하는 것입니다. 하지만 마이크로 소프트 비쥬얼 스튜디오는 c99를 지원하지 않으니 에러가 납니다. 어떤 회사가 채점서버 컴파일러를 마이크로소프트 것을 쓴다면 위 코드는 에러가 나니 조심하시기 바랍니다.