BOJ2817 ALPS식 투표

2024. 1. 31. 23:40· Problem Solving/구현
목차
  1. 정렬하는 코드 한번 봐주기

https://www.acmicpc.net/problem/2817

 

2817번: ALPS식 투표

첫 번째 줄에는 전대프연 대회에 참가한 참가자들의 수 X( 1 ≤ X ≤ 2,500,000) 이 주어진다. 두 번째 줄에는 전대프연에 참가한 스태프의 수 N (0 ≤ N ≤ 10) 이 주어진다. 다음 N개의 줄에 걸쳐 각 

www.acmicpc.net

 

나는 클래스를 만들지 않았지만 클래스는 만드는 것도 좋은 방법인듯, 파이썬의 튜플처럼 사용할 수 있을 듯하다.

 

 

import java.util.*;
import java.io.*;
public class Main
{
    
    
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int x = Integer.valueOf(br.readLine());
		int n = Integer.valueOf(br.readLine());
		
        char[] points = new char[2_500_000];  
        int[] numbers = new int[26];
		boolean[] isCandidate = new boolean[26];
		for(int i=0;i<n;i++){
		    String[] input = br.readLine().split(" ");
		    if(Integer.valueOf(input[1])*100<x*5) continue;
            isCandidate[input[0].charAt(0)-'A']=true;
		    for(int j=1;j<15; j++){
		        points[Integer.valueOf(input[1])/j]=input[0].charAt(0);

		    }
		}

		int count=0;
		for (int i=points.length-1;i>=0;i-- ){
		   if(count==14) break;
		   if(points[i]=='\u0000') continue;
		   count++;
		   numbers[points[i]-'A']++;
		}

		
		for(int i=0; i<26;i++){
		    if(numbers[i]==0 && isCandidate[i]==false) continue;
		    bw.write((char)(i+'A')+" "+numbers[i]+"\n");
		    
		}
		
		
		
		bw.flush();
	}
}

 

 

 

정렬하는 코드 한번 봐주기

import java.util.Scanner;

class Main
{
    static class Score{
        Score(int staffIndex, double scr) {
            this.staffIndex = staffIndex;
            this.scr = scr;
        }
        int staffIndex;
        double scr;
    }

    public static void sortScoresDescendingOrder(Score[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < i; j++) {
                if (arr[i].scr > arr[j].scr) {
                    Score cur = arr[i];
                    for (int k = i; k > j; k--)
                        arr[k] = arr[k - 1];
                    arr[j] = cur;
                }
            }
        }
    }

    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int N = sc.nextInt();

        // 1. 전체 득표수의 5% 미만의 스태프를 후보에서 제외한다.
        double validCut = X * 0.05;
        boolean[] validCandidate = new boolean[26];
        int[] staffVote = new int[26];
        int candidateCount = 0;
        for (int i = 0; i < N; i++) {
            String name = sc.next();
            int vote = sc.nextInt();
            if (vote >= validCut) {
                int index = name.charAt(0) - 'A';
                validCandidate[index] = true;
                staffVote[index] = vote;
                candidateCount++;
            }
        }

        // 2. 남은 스태프마다 받은 득표수를 1~14로 나눈 점수 집합을 구한다.
        Score[] scores = new Score[candidateCount * 14];
        int scoreIndex = 0;
        for (int i = 0 ; i < 26; i++) {
            if (validCandidate[i]) {
                for (int j = 1; j <= 14; j++)
                    scores[scoreIndex++] = new Score(i, (double)staffVote[i] / j);
            }
        }

        // 3. 전체 점수 집합에서 점수가 큰 1~14번째 스태프에게 칩을 1개씩 지급한다.
        sortScoresDescendingOrder(scores);

        int[] ans = new int[26];
        for (int i = 0; i < 14; i++)
            ans[scores[i].staffIndex]++;

        // 4. 스태프 이름에 대해 사전순으로 후보 스태프와 받은 칩의 수를 출력한다.
        for (int i = 0; i < 26; i++) {
            if (validCandidate[i])
                System.out.println((char)(i + 'A') + " " + ans[i]);
        }

    }
}

'Problem Solving > 구현' 카테고리의 다른 글

BOJ1233 주사위  (1) 2024.02.01
BOJ2745 진법 변환  (0) 2024.02.01
BOJ2840 행운의 바퀴  (1) 2024.01.31
BOJ1730 판화 (R)  (0) 2024.01.31
BOJ10250 ACM 호텔  (0) 2024.01.31
  1. 정렬하는 코드 한번 봐주기
'Problem Solving/구현' 카테고리의 다른 글
  • BOJ1233 주사위
  • BOJ2745 진법 변환
  • BOJ2840 행운의 바퀴
  • BOJ1730 판화 (R)
윤재에요
윤재에요
윤재에요
yunzae.log
윤재에요
전체
오늘
어제
  • 분류 전체보기 (435)
    • Computer Science (115)
      • 데이터베이스 (50)
      • 네트워크 (18)
      • 소프트웨어 공학 (1)
      • 알고리즘 (10)
      • 자료구조 (9)
      • 컴퓨터구조 (0)
      • 운영체제 (0)
      • 데이터 통신 (16)
      • 프로그래밍언어론 (11)
    • Project (20)
      • 후크(Flutter) (1)
      • BDSR로그북(App,BackEnd) (2)
      • 나만의 주점(STM32,Arduino,androi.. (9)
      • 공다(App,BackEnd) (2)
      • 카카오쇼핑 클론코딩 (4)
      • 암호화폐자동매매 (2)
    • Problem Solving (205)
      • 자바 문법 (20)
      • 파이썬 문법,함수 (6)
      • 그리디 (5)
      • 구현 (43)
      • DFS (3)
      • BFS (17)
      • 정렬 (15)
      • 이진 탐색 (16)
      • 다이나믹 프로그래밍 (6)
      • 최단 경로 (5)
      • 그래프 (1)
      • 자료구조 (5)
      • 투포인터 (15)
      • SQL (41)
      • 구간합 (7)
    • I leaned (78)
      • 스프링,스프링부트 (31)
      • Git (6)
      • JAVA (5)
      • Etc (30)
    • 취업 (15)
      • PT면접 (6)
      • 기술면접 (9)
      • 인성면접 (0)
    • log (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 효율적인화폐구성
  • 교환정렬
  • 먀
  • 이것이코딩테스트다
  • 다이어그램
  • 참조 무결성
  • 기수정렬
  • 다익스트라
  • 이것이 코딩테스트다
  • 다이나믹프로그래밍
  • 개미전사
  • 최단거리
  • 계수정렬
  • 힙큐
  • 이것이 코딩테스트다.
  • Relationship model
  • 파이썬
  • 플로이드 워셜
  • 제약 사항
  • weak entity
  • 다이나믹
  • DP
  • 카카오테크캠퍼스
  • 부품찾기
  • 최단 거리
  • 데이터베이스
  • UML
  • E-R Model
  • 재시도
  • 그리디

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
윤재에요
BOJ2817 ALPS식 투표
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.