🌞Algorithm/🔥Baekjoon

[Baekjoon] 1270_전쟁 - 땅따먹기

뿌야._. 2024. 6. 3. 10:15

Silver III

문제(출처: https://www.acmicpc.net/problem/1270)

< 전쟁 - 땅따먹기 >

 

문제 풀이 

 

HashMap을 사용해서 가장 많이 나온 번호와 그 개수를 구한다.

* 병사 번호가 2^31 이하 이므로 HashMap Key값을 Long형으로 선언해야 한다.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.StringTokenizer;

public class _1270_ { // 전쟁 - 땅따먹기

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		HashMap<Long, Integer> map = new HashMap<>();
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());

			int max = 0;
			Long idx = 0L;

			int t = Integer.parseInt(st.nextToken());
			for (int j = 0; j < t; j++) {
				long num = Long.parseLong(st.nextToken());

				if (map.containsKey(num)) {
					map.replace(num, map.get(num) + 1);
				} else {
					map.put(num, 1);
				}

				if (map.get(num) > max) {
					max = map.get(num);
					idx = num;
				}
			}

			if (max > t / 2) {
				bw.write(idx + "\n");
			} else {
				bw.write("SYJKGW\n");
			}

			map.clear();
		}
		bw.flush();
	}
}
변수)
n : 땅의 개수
map : 각 번호와 번호 개수
max, idx : 가장 많이 나온 번호, 번호 개수
t : 병사 수
num : 병사 번호

 

땅의 개수를 입력받는다. 땅의 개수만큼 병사 수와 병사 번호를 입력받는다. 병사 번호를 입력받으면서 map에 이미 존재하는 번호라면 value를 1 증가시키고 없는 번호라면 추가한다. 병사 수가 가장 많은 병사 번호와 병사 수를 구한다. 최종 병사 수의 절반보다 가장 많이 나온 병사 번호 개수가 크다면 병사 번호를 출력하고, 그렇지 않다면 "SYJKGW"를 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 11008_복붙의 달인  (0) 2024.06.05
[Baekjoon] 11292_키 큰 사람  (0) 2024.06.04
[Baekjoon] 21920_서로소 평균  (0) 2024.05.30
[Baekjoon] 3054_피터팬 프레임  (0) 2024.05.29
[Baekjoon] 9324_진짜 메시지  (0) 2024.05.28