

1. 문제 링크
1270번: 전쟁 - 땅따먹기
첫째 줄에는 땅의 개수 n(n<=200)이 주어진다. 그리고 두 번째 줄에서 n+1번째 줄에는 제일 처음에 숫자 Ti(i번째 땅의 병사수, Ti<=100,000)와, Ti개의 숫자 (각각 병사의 군대 번호)가 주어진다. i번째 땅
www.acmicpc.net
2. 풀이
map을 이용하여 풀면 된다.
배열을 2^31칸을 만들 수 없으니 map을 이용하여 병사의 수를 카운트하며 가장 많은 병사가 반절이 넘어간다면 그 인덱스 값을 출력해주면 된다.

조금 추하게 시간제한 꽉꽉 채워서 겨우 맞았다. map을 한두번만 접근을 더 호출해도 시간이 터진다. 최대한 덜 접근해서 겨우 맞았다.
3. 코드
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
using ll = long long;
int main() {
int t; scanf("%d", &t);
while (t--) {
map<ll, int> cnt;
ll ret = 0, idx = -1;
int n; scanf("%d", &n);
for (int i = 0; i < n; i++) {
ll num; scanf("%lld", &num);
ll tmp = ++cnt[num];
if (tmp > ret) {
idx = num;
ret = tmp;
}
}
if (ret > n / 2) printf("%lld\n", idx);
else printf("SYJKGW\n");
}
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[20208] 진우의 민트초코우유 (0) | 2021.10.27 |
---|---|
백준[1037] 약수 (0) | 2021.10.26 |
백준[23247] Ten (0) | 2021.10.20 |
백준[20168] 골목 대장 호석 - 기능성 (0) | 2021.10.20 |
백준[2729] 이진수 덧셈 (0) | 2021.10.19 |