728x90
1270번: 전쟁 - 땅따먹기
첫째 줄에는 땅의 개수 n(n<=200)이 주어진다. 그리고 두 번째 줄에서 n+1번째 줄에는 제일 처음에 숫자 Ti(i번째 땅의 병사수, Ti<=100,000)와, Ti개의 숫자 (각각 병사의 군대 번호)가 주어진다. i번째 땅
www.acmicpc.net
풀이
HashMap을 사용해서 문제를 풀었다.
결국 과반을 초과하는 군대는 1곳밖에 없기 때문에 해쉬맵에 계속 군대 번호를 넣어주면서 해당 번호의 개수를 갱신해주고,
이 갱신한 값 중 max값을 계속 갱신해서 찾아줬다.
만약, max값이 N/2 이하면 아직 점령하지 못한 곳이기 때문에 전쟁중이다. SYJKGW 출력
만약, max 값이 N/2 초과면 점령한 곳이기 때문에 List에 해쉬맵의 key값을 keySet()을 사용해서 넣어주고,
해당 max값에 해당하는 군대번호를 찾게된다면 StringBuilder에 넣어주고 break로 빠져나왔다.
(왜냐면 과반을 초과하는 군대는 1곳밖에 없기 때문)
전체코드
package 백준renew;
import java.io.*;
import java.util.*;
public class 실버3_1270_전쟁_땅따먹기 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
HashMap<String, Integer> map = new HashMap<>();
int N = Integer.parseInt(br.readLine());
for(int tc=0; tc<N; tc++) {
map.clear();
int max = Integer.MIN_VALUE;
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for(int i=0; i<T; i++) {
String num = st.nextToken();
if(!map.containsKey(num)) {
map.put(num, 1);
max = Math.max(max, 1);
}else {
map.put(num, map.get(num)+1);
max = Math.max(max, map.get(num));
}
}
if(max <= T/2) {
sb.append("SYJKGW").append('\n');
}else {
List<String> list = new ArrayList<>(map.keySet());
for(int i=0; i<list.size(); i++) {
if(map.get(list.get(i)) == max) {
sb.append(list.get(i)).append('\n');
break;
}else {
continue;
}
}
}
}
bw.write(sb.toString());
bw.close();
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[BOJ] 15720: 카우버거 (JAVA) (1) | 2024.04.19 |
---|---|
[BOJ] 1063: 킹 (JAVA) (0) | 2024.04.17 |
[BOJ] 25206: 너의 평점은 (JAVA) (0) | 2024.04.16 |
[BOJ] 1475: 방 번호 (JAVA) (0) | 2024.04.15 |
[BOJ] 18352: 특정 거리의 도시 찾기 (JAVA) (0) | 2024.04.15 |