정해솔·2022년 3월 18일
0

1. 첫번째 시도

int main()
{

int num = 0;	//카드 개수
int i = 0, j = 0;
int big = 0;	//가장 많은 카드 개수 저장
int k = 0;		
int arr[100000]={0};	//카드 숫자 저장할 배열	// 2^62 넣어야하는데 lond long 배열이 안됨 ?.?
int Arr[100000] = {0};		//어떤 카드가 많았는지 개수 저장할 배열

scanf("%d", &num);	

for (i=0; i < num; i++)
	scanf("%d", &arr[i]);	    
    
for (i = 0; i < num; i++)	//숫자 카드 숫자들을 비교
{
	for (j = i + 1; j <= num; j++) {
		if (arr[i] == arr[j])
			Arr[i]++;
	}	
}

big = Arr[0];
//Arr[]에 저장된 값 중 큰 값을 찾아내기

for (i = 0; i < num; i++)
{
	for (j = i + 1; j <= num; j++) {
		if (big < Arr[j])
			big = Arr[j];	//가장 많이 중복된 카드의 '값'를 저장
	}
}

for (i = 0; i < num; i++)	
	if (big == Arr[i]) {
		k = i;
		break;	
        //찾았으면 탈출. ~~근데 같은 장수 있으면 더 작은 수 출력해야하는데?~~
	}
		
printf("%d", arr[k]); 
return 0;

}

이렇게 하면 적당한 수 (int)범위에서는 정상 작동함.
(물론 같은 개수일경우 더 작은 수 출력하는 코드는 아직 제외하고)
근데
★문제점★
1.int arr[100000]={0};에서 long long 배열이 안됨.
나는 -2^62부터 2^62 까지 넣어야되는데 일단 이거 선언부터 안됨
이건 왜 안되는지 모르겠음.
long long 배열 선언 하자마자 초반 scanf부터 아무것도 작동 안하고 그냥 꺼짐. (이걸 int 로 바꾸면 정상 실행은 되는 걸로 봐서 얘가 문제인거 같긴 한데 뭔지 모르겠음)
2. 최대 장수 있는 숫자가 여러개일 경우, 작은 수를 출력해야 하는데 여기서 이상함을 직감함..
처음부터 다시 해야될듯. 애초에 처음부터 정렬한 다음에 접근하면 편할 것 같음
3. 다시 보니까 너무 정신 사나움

그래서 ...........................................................

2. 두번째 시도

-long long 배열이 왜 생성이 안될까?
생성만 하면 바로 창이 꺼짐.
찾아보니 너무 커서 그런거라고 동적할당 해야한대서

int main()
{

int i = 0, j = 0;
int n = 0;

long long arr[100000] = { 0 };
long long* ptr = (long long*)malloc(sizeof(long long)*100000);

scanf("%d", n);
for (i = 0; i < n; i++) {
	scanf("%lld", &arr[i]); //★
}
for (i = 0; i < n; i++) {
	printf("%lld", &arr[i]);
}
return 0;
}

우선 이렇게 바꿔봤다..
근데 저 별 표시된 지점부터 오류가 남. 왜지?
근데!!!!!!!!!!!
다른 사람들 보니까 long long 배열 잘만 쓰길래 다시 노트북으로 다시 해봄
갑자기 long long 배열 다른 컴퓨터로 하니까 오류 안나네??!!
뭐가 문제인지? 어쨌든 필요없어서 동적할당 어쩌구는 버림

=================================================

3. 마지막 시도..

-정렬하고 횟수 세고 하는게 좀 아직 구현 능력이 모자라서 내 생각만큼 구현을 못하겠음 (어떻게 돌릴지 구상이 끝나도 써야할 자료형 판단하는거나 어떤 식으로 시간단축할 수 있을지 기본 상식이 부족한거같음. 자료구조 등등.. 공부를 더 해야 뭘 풀든 말든 할 듯)
-결국 C++로 방향을 바꿈 (sort 쓰려고)

#define _CRT_SECURE_NO_WARNINGS
#include
#include
using namespace std;

int main()
{

long long arr[1000000];

int num;


scanf("%d", &num);

for (int i = 0; i < num; i++)
{
	scanf("%lld", &arr[i]);
}

sort(arr, arr + num);

long long ans = arr[0];
int final_cnt = 1;
int cnt = 1;

for (int i = 1; i < num; i++)	//정렬한 것을 비교 
{
	if (arr[i] == arr[i - 1])	//이전 수에 같은 수 있었으면 카운트 +1
	{
		cnt += 1;
	}
	else
	{
		cnt = 1;
	}

	if (final_cnt < cnt)	//최종 카운트보다 많은 카운트가 나타나면 업데이트!
	{
		final_cnt = cnt;
		ans = arr[i];
	}
}
printf("%lld\n", ans);
return 0;

}

결국 이렇게 풀긴 했다.
c로 하면 버블 정렬로 할 수 있을 것 같긴 한데 시간초과 뜰거같음 (틀렸습니다 공포증 생김)

                        

0개의 댓글

관련 채용 정보