알고리즘
백준 11637 인기투표
킨글
2024. 8. 28. 23:08
설명
1. 모두 입력 받는다.
2. 모두 입력 받으면서 sum 값을 저장한다.
3. sortedVotes에 votes를 복사하고 정렬한다.
4. 만약 sortedVotes의 맨 마지막 index 값과 index -1의 값이 같으면 "no winner"를 출력한다.
5. 그렇지 않으면 else문을 통해 동일한 값을 찾고, 해당 index를 votes에서 찾아준다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class Main {
// 11637
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int n = Integer.parseInt(br.readLine());
List<Integer> votes = new ArrayList<>();
int sum = 0;
for (int j = 0; j < n; j++) {
int num = Integer.parseInt(br.readLine());
votes.add(num);
sum += num;
}
// 정렬된 투표 리스트 생성
List<Integer> sortedVotes = new ArrayList<>(votes);
Collections.sort(sortedVotes);
if (sortedVotes.get(sortedVotes.size() - 1).equals(sortedVotes.get(sortedVotes.size() - 2))) {
bw.write("no winner\n");
} else {
int winnerValue = sortedVotes.get(sortedVotes.size() - 1);
int winnerIndex = votes.indexOf(winnerValue);
String winnerType = (winnerValue > sum / 2) ? "majority" : "minority";
bw.write(winnerType + " winner " + (winnerIndex + 1) + "\n");
}
}
bw.flush();
bw.close();
br.close();
}
}