전국 대회 선발 고사

2023. 5. 24. 23:22Programmers/Java

문제

 

결과

 

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int solution(int[] rank, boolean[] attendance) {
    
        ArrayList<Integer> array = new ArrayList<>();
        
        for(int i=0; i<attendance.length; i++) {
            if(attendance[i]) { //출석이 가능한 학생들
                array.add(i);
            }
        }
        
        int[] rank2 = new int[array.size()];
        
        for(int i=0; i<array.size(); i++){
            rank2[i] = rank[array.get(i)]; 
        }
        array.clear();
        
        Arrays.sort(rank2);
 
        for(int i=0; i<3; i++) {
            for(int j=0; j<rank.length; j++) {
                if(rank2[i]==rank[j]) {
                    array.add(j);
                }
            }
        }
        
    return array.get(0* 10000 + array.get(1)*100 + array.get(2);
    }
}
cs

1. 출석 가능한 학생들의 인덱스를 담을 ArrayList를 만듦 : 몇 명인지 모르니까 ArrayList

2. 출석 가능한 학생들의 인원 수만큼의 크기인 배열 rank2를 만듦

3. 학생들의 등수가 담긴 배열과 출석 여부 배열의 순서가 같음

    -> 같은 학생에 대한 등수와 출석 여부

3-1. rank2[i] = rank[array.get(i)]

       등수가 담긴 배열에 출석여부 인덱스를 넣으면 출석이 가능한 학생들의 등수를 알 수 있음

4. 객체를 재활용하기 위해 array.clear()로 비워줌

5. 출석가능한 학생의 순번을 알기 위해 if(rank2[i] == rank[j])

    출석가능한 학생만 모여있는 배열과 모든 학생이 있는 배열을 비교했을 때

    같은 학생이 나오는 경우 모든 학생이 있는 배열에서의 인덱스(j)를 알면 순번을 알 수 있음

 

'Programmers > Java' 카테고리의 다른 글

크레인 인형뽑기 게임  (0) 2023.09.04
마법의 엘리베이터  (0) 2023.08.04
x 사이의 개수  (2) 2023.05.17
qr code  (2) 2023.05.13
폰켓몬  (0) 2023.01.29