[BOJ] 11652번 : 카드

2024. 8. 29. 19:22Algorithm

1. problem : 

https://www.acmicpc.net/problem/11652

 

 

2. solution 1 :

#include <bits/stdc++.h>
using namespace std;
int n;
vector<long long> v; // number, cnt
int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;

	for (int i = 0; i < n; i++) {
		long long x;
		cin >> x; 
		v.push_back(x);
	}
	sort(v.begin(), v.end()); 
	int idx = 0; 
	int cnt = 0;
	long long maxVal = -(1ll << 62); 
	int maxcnt = 0;
	while (idx < n) {
		while (idx == 0 || idx < n && v[idx] == v[idx - 1]) {
			cnt++; 
			idx++;
		}
		if (maxcnt < cnt) {
			maxcnt = cnt; 
			maxVal = v[idx-1];
		}
		cnt = 0; 
		cnt++; 
		idx++;
	}
	cout << maxVal << '\n';
}

이 코드는 100% 정확한 코드가 아니다. 왜냐하면, 마지막 숫자에대해서는 고려하지 않았기때문이다. 물론, 마지막 숫자가 1개라면 영향이 없기때문에 , 정답 처리가 되었다. 

#include <bits/stdc++.h>
using namespace std;
int n;
vector<long long> v; // number, cnt
int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;

	for (int i = 0; i < n; i++) {
		long long x;
		cin >> x; 
		v.push_back(x);
	}
	sort(v.begin(), v.end()); 
	int idx = 0; 
	int cnt = 0;
	long long maxVal = -(1ll << 62); 
	int maxcnt = 0;
	while (idx < n) {
		while (idx == 0 || idx < n && v[idx] == v[idx - 1]) {
			cnt++; 
			idx++;
		}
		if (maxcnt < cnt) {
			maxcnt = cnt; 
			maxVal = v[idx-1];
		}
		cnt = 0; 
		cnt++; 
		idx++;
	}
	if (cnt > maxcnt) maxVal = v[idx - 1];
	cout << maxVal << '\n';
}

마지막줄처럼 처리를 해줘야한다. 

 

3. solution 2 :

// Authored by : BaaaaaaaaaaarkingDog
// Co-authored by : -
// http://boj.kr/f3feaf22016f4c9687b84ab6be2f4389
#include <bits/stdc++.h>
using namespace std;

int n;
long long a[100005];

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for(int i = 0; i < n; i++)
    cin >> a[i];
  sort(a, a+n);
  int cnt = 0;
  long long mxval = -(1ll << 62) - 1; // 1을 long long으로 형변환하지 않고 1 << 62로 작성시 int overflow 발생
  int mxcnt = 0;
  for(int i = 0; i < n; i++){
    if(i == 0 || a[i-1] == a[i]) cnt++; // i가 0인 경우 앞쪽 식이 true이기 때문에 a[i-1]을 참조하지 않음
    else{
      if(cnt > mxcnt){
        mxcnt = cnt;
        mxval = a[i-1];
      }
      cnt = 1;
    }
  }
  if(cnt > mxcnt) mxval = a[n-1]; // 제일 마지막 수가 몇 번 등장했는지를 별도로 확인
  cout << mxval;
}

source code 출처 : https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x0F/solutions/11652.cpp

 

basic-algo-lecture/0x0F/solutions/11652.cpp at master · encrypted-def/basic-algo-lecture

바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.

github.com

 

'Algorithm' 카테고리의 다른 글

[BOJ] 5648번 : 역원소 정렬  (0) 2024.08.30
[BOJ] 1914번 : 하노이 탑  (0) 2024.08.29
[BOJ] 11651번 : 좌표 정렬하기 2  (0) 2024.08.29
[BOJ] 11650번 : 좌표 정렬하기  (0) 2024.08.29
[BOJ] 10814번 : 나이순 정렬  (1) 2024.08.28