오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 Array Q08_등수구하기 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 Array Q08_등수구하기

chan_96 2022. 2. 13. 21:23
728x90
설명

N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.

같은 점수가 입력될 경우 높은 등수로 동일 처리한다.

즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.


입력

첫 줄에 N(3<=N<=100)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력된다.


출력

입력된 순서대로 등수를 출력한다.

 


예시 입력1


예시 출력

5
87 89 92 100 76
4 3 2 1 5

 

코드

내가 입력한 코드

import java.util.Scanner;

public class Q08 {
	public int[] solution(int n, int[] arr) {
		int[] answer = new int[n];
		
		for (int i = 0; i < n; i++) {
			int tmp = arr[i];
			int cnt = 1;
			for (int j = 0; j < answer.length; j++) {
				if(tmp < arr[j]) {
					cnt++;
				}
			}
			answer[i] = cnt;
		}
		
		
		return answer;
	}
	public static void main(String[] args) {
		Q08 T = new Q08();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		int[] arr = new int[n];
		
		for (int i = 0; i < n; i++) {
			arr[i] = kb.nextInt();
		}
		
		for(int x:T.solution(n, arr)) {
			System.out.print(x+" ");
		}
	}
}

 




해설 코드

import java.util.*;
class Main {	
	public int[] solution(int n, int[] arr){
		int[] answer = new int[n];
		for(int i=0; i<n; i++){
			int cnt=1;
			for(int j=0; j<arr.length; j++){
				if(arr[j]>arr[i]) cnt++;
			}
			answer[i]=cnt;
		}
		return answer;
	}
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n=kb.nextInt();
		int[] arr=new int[n];
		for(int i=0; i<n; i++){
			arr[i]=kb.nextInt();
		}
		for(int x :T.solution(n, arr)) System.out.print(x+" ");
	}
}

 

 

풀이 및 정리 

점수를 입력받은 배열과 추가적으로 등수를 저장할 배열 추가적으로 생성해줘야한다. 
등수를 지정할 변수 cnt를 값 1로 생성해준다.
반복문에서 점수가 저장된 arr 배열을 인덱스 0부터 지정해서 arr배열에 모든 인덱스의 값과 비교시켜준다.
for(int i=0; i<n; i++){
    int cnt=1;
    for(int j=0; j<arr.length; j++){
        if(arr[j]>arr[i]) cnt++;
    }
    answer[i]=cnt;
}​
예를 들어 arr[] = {89,85,85,81,80}의 점수의 배열을 입력 받았다면

i=0일 때
arr[0]=89의 값을 89,85,85,81,80과 비교하고 89보다 큰값이 있을 때 cnt값을 증가
89보다 큰값이 없으므로 cnt = 1 이므로 answer[0] = 1이 된다.

i=1일 때
arr[1]=85의 값을 89,85,85,81,80과 비교하고 85보다 큰값이 있을 때 cnt값을 증가
85보다 큰값이 1개이므로 cnt =  2 이므로 answer[1] = 2

i=2일 때
arr[2]=85의 값을 89,85,85,81,80과 비교하고 85보다 큰값이 있을 때 cnt값을 증가
85보다 큰값이 1개이므로 cnt =  2 이므로 answer[1] = 2

i=3일 때
arr[3]=81의 값을 89,85,85,81,80과 비교하고 81보다 큰값이 있을 때 cnt값을 증가
81보다 큰값이 3개이므로 cnt =  4 이므로 answer[1] = 4

i=4일 때
arr[4]=80의 값을 89,85,85,81,80과 비교하고 80보다 큰값이 있을 때 cnt값을 증가
80보다 큰값이 4개이므로 cnt =  5 이므로 answer[1] = 5

=> answer[] = {1,2,2,4,5}
728x90
Comments