인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 문제를 풀고 문제 해설을 작성해보았습니다.
섹션2. Array(1,2차원 배열)의 8. 등수구하기 강의편 입니다.
설명
N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.
같은 점수가 입력될 경우 높은 등수로 동일 처리한다.
즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.
입력
첫 줄에 N(3<=N<=100)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력된다.
출력
입력된 순서대로 등수를 출력한다.
import java.util.Scanner;
public class 등수구하기 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] str = new int[num];
for(int i = 0; i < num; i++) {
str[i] = sc.nextInt();
}
for(int score : solution(num, str)) {
System.out.print(score + " ");
}
}
public static int[] solution(int n, int[] s) {
int[] scoreArr = new int[n];
for(int i=0; i<n; i++) {
int score = 1;
for(int k=0; k<n; k++) {
if(s[k] > s[i]) {
score++;
}
}
scoreArr[i] = score;
}
return scoreArr;
}
}
>>해설
해당 문제는 이중반복문을 사용하여야 한다.
0 | 1 | 2 | 3 | 4 |
87 | 89 | 92 | 100 | 76 |
이런식으로 값이 있을 때 인덱스 0번째 값과 1,2,3,4 번째 값을 비교하여
1,2,3,4 값이 0보다 크면 score 값을 늘려주고 이 늘어난 값이 인덱스 0번째 점수의 등수이다.
그러면 여기서 필요한 것은 고정된 한 값과 이를 비교할 나머지 값인데
이를 코드로 옮기면 i를 증가하면서 반복문 돌면서 그 안에서 k를 증가하면서 반복문을 돈다.
for문 1 ) i가 점수 갯수만큼 반복문을 돌때 score(등수)를 1로 선언해주고
for문 2) k로 점수 갯수점수만큼 반복문을 돌면서 인덱스 k번째의 값이 인덱스 i번째 보다 큰지 조건을 건다.
조건이 크면 score(등수)를 증가시키고 k 반복문이 끝난 뒤에 해당 등수를 새로운 배열에 추가한다.
등수가 담긴 scoreArr를 리턴한다.
'Computer Science > Algorithm' 카테고리의 다른 글
[Inflearn] 봉우리 (0) | 2023.01.01 |
---|---|
[Inflearn] 격자판 최대합 (0) | 2022.12.18 |
[Inflearn] 점수계산 (0) | 2022.12.03 |
[Inflearn] 뒤집은 소수 (0) | 2022.11.26 |
[Inflearn] 소수 (0) | 2022.11.23 |