[swexpert] 1983. 조교의 성적 매기기 (python, java, D2)

728x90
반응형

 10명이면 각 등급을 한 명당(10/10) 다르게 받게 된다 

현재의 위치 (0부터 시작)을 n/10을 나눈 것이 각 등급의 인덱스를 가르킨다 

내가 한 방법은 전체 점수(내림차순 기준)과 학생 번호를 같이 저장해서 번호를 찾아 해당 인덱스를 반환하는 식으로 

풀었다

 

*추가

번호가 k인 학생이랑 같은 총점인 다른 학생이 없으므로 학생 번호를 저장할 필요없이 total 점수만 기억해놓고 점수가 같은지 비교하는 방법으로 구현하는 것이 더 좋을 듯하다

 

1. 파이썬 풀이 

t=int(input())
rank=['A+','A0','A-','B+','B0','B-','C+','C0','C-','D0']
for i in range(1,t+1):
    n,k=map(int,input().split())
    arr=[]
    for num in range(1,n+1):
        a,b,c=map(int,input().split())
        total=a*0.35+b*0.45+c*0.2
        arr.append((total,num))
    arr.sort(reverse=True)
    print(f'#{i}',end=' ')
    for idx,x in enumerate(arr):
        if x[1]==k:
            print(rank[int(idx/(n/10))])
            break

 

2. 자바 풀이 

 


import java.util.Scanner;

public class Solution {
	
		static String grade[]= {"A+","A0","A-","B+","B0","B-","C+","C0","C-","D0"};
	
public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int t=sc.nextInt();
		sc.nextLine();
		for (int tc = 1; tc <=t; tc++) {		
			int n=sc.nextInt();
			int k=sc.nextInt();
			double [] score=new double[n];
			for (int i = 0; i < n; i++) {
				int mid=sc.nextInt();
				int fin=sc.nextInt();
				int project=sc.nextInt();
				score[i]=mid*0.35+fin*0.45+project*0.2;
				
			}
			int rank=0; // 나중에 인덱스 0 시작이여서 0부터 증가 
			for (int i = 0; i < n; i++) {
				if(score[i]>score[k-1])rank+=1;
			}
			System.out.printf("#%d %s\n",tc,grade[rank/(n/10)]);
			
		}
		sc.close();
	}
	
	
}
	


728x90
반응형
TAGS.

Comments