1. 문제
학생 N명의 점수가 입력되면, 입력된 순서대로 등수를 출력한다.
같은 점수라면 높은 등수로 동일 처리한다.
ex(2 2 2 1 5)
2 - 1. 나의 풀이
좀 복잡하게 풀었다.
1. 최대값을 찾는다.
2. 최대값 인덱스를 answer 배열에 rank를 적는다.
3. 같은 점수가 있으면 높은 동일 점수로 처리하기 위해서 동일 점수를 찾는다.
4. answer 배열이 꽉차면 반복문을 일찍 나온다. (rank == n+1)
answer[index] = rank를 하고나서 intArr[index] = -1을 해줘야한다.!
2 - 2. 나의 코드
import java.util.Scanner;
public class Array08 {
public static int[] solution(int[] intArr, int n) {
int[] answer = new int[n];
int index=0;//최댓값의 index
int rank=1; //등수
for (int i = 0; i < n; i++) {
int max = 0;
//최댓값 찾기
for (int j = 0; j < n; j++) {
if(intArr[j] > max) {
max= intArr[j];
index = j; //max값인 수의 인덱스 저장
}
}
//answer[index]에 랭크를 적는다.
answer[index] = rank;
intArr[index] = -1;
//같은 점수가 있으면 높은 동일 점수로 처리한다.
for (int j = 0; j < n; j++) {
if(max == intArr[j]){
answer[j] = answer[index];
intArr[j] = -1;
rank++;
}
}
rank++;
//answer가 다 입력되면 for문을 탈출해야함 (동일 점수가 있을 경우 예정된 for문 보다 answer배열이 다 찬다.
//탈출하지 않으면 마지막에 입력된 answer가 계속 갱신된다.
//rank == n+1 이면 answer 배열이 다 찼음을 의미
if(rank == n+1)break;
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] intArr = new int[n];
for (int i = 0; i < n; i++) {
intArr[i] = sc.nextInt();
}
for (int x : solution(intArr, n)) {
System.out.print(x + " ");
}
}
}
3 - 1. 강의 풀이
매우 쉽게 풀이가 가능하다.
1. intArr[i] 보다 큰 수의 개수를 count 한다.
2. count가 등수이다. (count는 기본 1)
3 - 2. 강의 코드
import java.util.Scanner;
public class Array08_solution {
public static int[] solution(int[] intArr, int n) {
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
int count = 1;
for (int j = 0; j < n; j++) {
//intArr[i] 보다 큰 수가 있으면 count++한다. (1등에서 2등 처리)
if(intArr[i] < intArr[j]) count++;
}
answer[i] = count;
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] intArr = new int[n];
for (int i = 0; i < n; i++) {
intArr[i] = sc.nextInt();
}
for (int x : solution(intArr, n)) {
System.out.print(x + " ");
}
}
}
4. 얻어갈 점
1. 30분 정도 고민해서 풀었는데 강의보고 간단한 알고리즘 생각하니까 2~3분도 안되서 풀리는게 신기하고 재밌다.
2. 너무 복잡하게 생각하지 말자!
'자바 알고리즘 문제풀이 > Array(1, 2차원 배열)' 카테고리의 다른 글
10. 봉우리 (0) | 2023.09.14 |
---|---|
9. 격자판 최대합 (0) | 2023.09.14 |
7. 점수 계산 (0) | 2023.09.10 |
6. 뒤집은 소수 (0) | 2023.09.10 |
5. 소수(에라토스테네스의 체) (0) | 2023.09.02 |