kkw564   7년 전

어디서 런타임에러가 나는지 알 수 없네요..


도와주세요

amugeona   7년 전

c는 어디서 나온애인가요?

kkw564   7년 전

문제 입력에  5 2 중 2에해당합니다.

amugeona   7년 전

1 ≤ C ≤ 1,000,000,000

c의 범위로 봤을 때, 아래 부분에서 런타임 에러가 발생할 수 있습니다.

sort(a, a + c, comp_a);

이 부분에 대해서 검토해보세요.

kkw564   7년 전

#include <iostream>
#include <algorithm>
#include <stdio.h>

using namespace std;

struct _map
{
long long int num;
int idx;
};

struct _ans
{
long long int num;
int cnt;
};

bool comp_m(_map const &a, _map const &b)
{
return a.num > b.num;
}
bool comp_a(_ans const &a, _ans const &b)
{
return a.cnt > b.cnt;
}

int main()
{
_map m[1001];
_ans a[1001];

int n, j = 0;
long long int c;
int val;

scanf("%d %lld", &n, &c);

for (int i = 0; i < n; i++)
{
scanf("%d", &val);
m[i].num = val;
m[i].idx = i + 1;
}

sort(m, m + n, comp_m);

a[0].num = m[0].num;
a[0].cnt = 1;

for (int i = 1; i < n; i++)
{
if (m[i].num == m[i - 1].num)
a[j].cnt++;
else
{
j++;
a[j].num = m[i].num;
a[j].cnt = 1;
}
}

sort(a, a + c, comp_a);

for (int i = 0; i < c; i++)
{
while (a[i].cnt > 0)
{
a[i].cnt--;
printf("%lld ", a[i].num);
}
}
}

그부분에 대해 c를 long long int로 두었는데 런타임에러가 여전히 뜨네요

어떻게 해결해야 될 지 알수있을까요..?

amugeona   7년 전

이 문제를 풀 때는 C가 필요하지 않습니다.

숫자 p가 최초로 나온 시점, 나온 빈도

이 2가지 정보를 바탕으로 문제를 해결해주시면 됩니다.

kkw564   7년 전

새로 짜는것도 생각을 해볼 수 있지만, 지금 저는 이 코드가 제 컴퓨터에서는 정상작동하는데 여기 제출 시 , 런타임에러가 나기에 그것부터 잡아보고싶습니다.


문제를 풀때 C가 필요하지 않다고 생각드셔도  저는 C를 이용하여 알고리즘을 설계했습니다.

amugeona   7년 전

런타임에러는 다음과 같은 테스트케이스를 실행해보시면 확인하실 수 있습니다.
5 200000000
2 1 2 1 2

제가 드리고 싶은 질문은 "c가 아니라 j로 소팅해야되지 않을까?" 라는 부분입니다.

a의 범위는 j가 관리를 하는데, j가 아닌 c로 소팅을 해서 여쭈어봅니다.

kkw564   7년 전

무슨 말씀인지 이해했습니다.


조금 다시생각해봐야겠네요 감사합니다!

댓글을 작성하려면 로그인해야 합니다.