728x90
반응형
문제정보
슈도 코드
- 임포트
- 메인메서드 생성
- 전체 참여자 N , 스태프 수 C
- 스태프와 스태프 투표수를 담는 배열 생성 staffs[26], vote[26]
- 스태프 수만큼 반복문 돌림
- 스태프 변수 target, 투표 수 vote생성, 참여가능한 staffCount 생성
- 만약 vote가 N*0.05를 넘는다면 staffts[target-’A’]에 true, vote[target-’A’]에 vote수 담기, staffCount++하기
- Score클래스 생성, 유저의 idx와 score값을 갖고 있음
- score[] 배열을 staffCount*14의 크기로 생성
- 26개의 참여자를 순회하며 true일경우 1~14의 점수집합을 생성하여 Score객체로 담기
- 각 점수를 내림차순으로 정렬(삽입 정렬)
- 정답을 출력할 배열 answer[] 배열을 26만큼 생성
- score[]배열을 순회하며 위에서 14개의 값을 각각 answer[score[i].staffIdx]++
- 스태프가 참인 배열의 이름과 값을 출력
주요 규칙
- 반복되는 규칙은 없지만 내용속의 방식을 잘 읽고 구현해야함
- 아직도 왜 이런 방식으로 구하고 문제속에서 이 방식에 대한 설명이 제대로 되어있는지는 잘 모르겠음…
구현 코드
package simulation;
import java.util.Scanner;
public class 알프식투표_2817 {
static class Score{
double score;
int staffIdx;
Score(int staffIdx, double score) {
this.staffIdx = staffIdx;
this.score = score;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int total = sc.nextInt();
int N = sc.nextInt();
boolean[] staffs = new boolean[26];
int[] voteCount = new int[26];
int candidateCount =0;
//커트라인 넘는 스태프 구하기
double cutLine = total * 0.05;
while(N-- >0){
String target = sc.next();
int vote = sc.nextInt();
if (vote >= cutLine) {
int index = target.charAt(0)-'A';
staffs[index] = true;
voteCount[index] = vote;
candidateCount++;
}
}
//각 스태프 점수 구하기
Score[] scores = new Score[candidateCount*14];
int scoreIndex = 0;
for (int i = 0; i < 26; i++) {
if(staffs[i]){
for (int j = 1; j <=14; j++) {
scores[scoreIndex++] = new Score(i, (double) voteCount[i]/j);
}
}
}
//3. 점수 내림차순
sortScoresDescendingOrder(scores);
int[] ans = new int[26];
for (int i = 0; i < 14; i++)
ans[scores[i].staffIdx]++;
// 4. 스태프 이름에 대해 사전순으로 후보 스태프와 받은 칩의 수를 출력한다.
for (int i = 0; i < 26; i++) {
if (staffs[i])
System.out.println((char)(i + 'A') + " " + ans[i]);
}
}
private static void sortScoresDescendingOrder(Score[] scores) {
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < i; j++) {
if (scores[i].score > scores[j].score) {
Score temp = scores[i];
for (int k = i; k >j; k--) {
scores[k] = scores[k-1];
}
scores[j] = temp;
}
}
}
}
}
728x90
반응형
'문제 풀이 > 백준 문제풀이' 카테고리의 다른 글
[BOJ 2840 - Java] 행운의바퀴 - 구현문제 (0) | 2024.10.18 |
---|---|
[BOJ 3085 - Java] 사탕게임 - 구현문제 (1) | 2024.10.15 |
[BOJ 3085 - Java] 사탕게임 - 구현문제 (0) | 2024.10.15 |
알고리즘 - 위상정렬 (0) | 2024.08.09 |
[BOJ14501 - Java] 퇴사문제 DP로 풀이하기 (0) | 2024.07.28 |