728x90
언어_자바
문제
N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.
같은 점수가 입력될 경우 높은 등수로 동일 처리한다.
즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.
예시 입출력
입력 )
5
87 89 92 100 76
출력 )
4 3 2 1 5
import java.util.Scanner;
public class Test8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 값 입력받기
int n = sc.nextInt();
int[] arr = new int[n];
for(int i=0; i<n; i++){
arr[i] = sc.nextInt();
}
// 받은 배열의 크기 만큼 새로운 배열 생성
int[] answer = new int[n];
for(int i =0; i<n; i++){
int cnt = 1;
for(int j=0; j<n; j++){
if(arr[j] > arr[i]) cnt++; // 받은 배열을 한 번씩 돌면서 자신보다 큰 수가 있을때 등수를 1증가
}
answer[i] = cnt; // 해당하는 i 번째 인덱스에 등수 저장
}
// 순수 배열 값만 출력
for(int x : answer){
System.out.print(x+" ");
}
}
}
문제 풀이 TIP
1 ) 입력 받은 배열의 크기에 해당하는 새로운 배열을 생성한다
2 ) 반복문을 돌면서 기준이 되는 배열이 그 다음 배열의 값보다 작을 때, 즉 자신보다 큰 수가 있을 때 등수(=cnt) 를 1증가한다.
arr[0] 은 87 arr[1] 은 89 이므로 자신보다 큰 수가 존재한다. 이 말은 즉, 87의 점수는 순위에서 밀려나는 것이다.
이렇게 모든 값을 비교하며 자신보다 큰 수가 존재하면(= 점수가 높으면) 자신의 등수(=cnt) 를 1증가해주자.
반복문이 끝난 후의 cnt 값을 해당 배열에 저장해주자.
이런 형태의 새로운 배열 생성 & 반복문 진행한다면, 동일 점수가 존재할 시에도 문제의 조건을 만족한다.
문제 출처)
인프런_자바(JAVA) 알고리즘 문제풀이 입문
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] (181891) 순서 바꾸기 (0) | 2024.02.19 |
---|---|
[프로그래머스] (181894) 2의 영역 (0) | 2024.01.19 |
[inflearn] 보이는 학생 (0) | 2024.01.18 |
[inflearn] 숫자만 추출 (0) | 2024.01.18 |
[inflearn] 뒤집은 소수 (1) | 2024.01.10 |