Skip to content

Instantly share code, notes, and snippets.

@Exom9434
Created May 31, 2024 09:27
Show Gist options
  • Save Exom9434/5d76a3f3e81f09f477da74637fabfee6 to your computer and use it in GitHub Desktop.
Save Exom9434/5d76a3f3e81f09f477da74637fabfee6 to your computer and use it in GitHub Desktop.
//노재경
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
System.out.println("총 진행할 투표수를 입력해 주세요");
int numVote = scanner.nextInt();
System.out.println("가상 선거를 진행할 후보자 인원을 입력해주세요");
int numCand = scanner.nextInt();
scanner.nextLine();
String[] candidates = new String[numCand];
int[] arrVotes = new int[numCand];
// 인코딩 오류 제거용 bufferedreader 사용.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
for (int i = 0; i < numCand; i++) {
System.out.printf("%d번째 후보자 이름을 입력해주세요: ", i + 1);
candidates[i] = reader.readLine();
}
boolean tieExists;
do {
for (int i = 0; i < numCand; i++) {
arrVotes[i] = 0; // 초기화
}
for (int i = 0; i < numVote; i++) {
int targetNum = random.nextInt(numCand);
String targetName = candidates[targetNum];
arrVotes[targetNum] += 1;
float totalRate = ((float) (i + 1) / numVote) * 100;
System.out.printf("[투표진행률]: %.2f%%, %d명 투표 => %s\n", totalRate, (i + 1), targetName);
for (int j = 0; j < numCand; j++) {
String name = candidates[j];
float rate = ((float) arrVotes[j] / numVote) * 100;
int vote = arrVotes[j];
System.out.printf("[기호:%d %s: %.2f%% (투표수: %d)]\n", j + 1, name, rate, vote);
}
System.out.println();
}
int maxVotes = 0;
List<String> winners = new ArrayList<>();
for (int i = 0; i < numCand; i++) {
if (arrVotes[i] > maxVotes) {
maxVotes = arrVotes[i];
winners.clear();
winners.add(candidates[i]);
} else if (arrVotes[i] == maxVotes) {
winners.add(candidates[i]);
}
}
if (winners.size() > 1) {
System.out.println("동점이 발생했습니다. 재투표를 진행합니다.");
tieExists = true;
// 동점 후보자만을 대상으로 재투표
String[] tieCandidates = new String[winners.size()];
winners.toArray(tieCandidates);
candidates = tieCandidates;
numCand = candidates.length;
} else {
tieExists = false;
System.out.printf("[투표결과] 당선인: %s\n", winners.get(0));
}
} while (tieExists);
scanner.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment