문제 설명

1. 문제 링크

http://icpc.me/1270

 

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
복사했습니다!