728x90
철 없는 세준이가 부모님을 속이기 위해 시험점수를 지능적으로 바꿨다...
세준이의 알고리즘은 시험점수 / 최고점수 * 100 이다.
따라서 나는 이렇게 코드를 작성해봤다.
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
class Main {
public static void main(String[] args) {
//과목 수 선언
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
//과목을 할당받을 ArrayList선언
ArrayList<Integer> Arr = new ArrayList<>();
//과목의 개수만큼 과목 점수 할당하는 반복문
for (int i=0; i<n; i++){
Arr.add(scan.nextInt());
}
//최대값 찾기
int max = Collections.max(Arr);
//평균을 담을 변수 선언
double avg = 0;
// i/max*100 반복문
for (int i=0; i<Arr.size(); i++){
avg += (double)Arr.get(i)/max*100;
}
System.out.println(avg/n);
}
}
배열문제기 때문에 당연히 배열을 사용한다기보다 ArrayList를 사용하면 max를 찾는 메서드가 있기 때문에 코딩이 더 간단하다고 생각했다.
구조는
1) 숫자 n을 받는다.
2) n만큼 과목점수를 작성하고 ArraysList에 담는다.
3) 최고점수를 Collections.max() 메서드로 가져온다.
4) 반복문을 통해 공식을 적용하고 평균을 가져온다.
다른사람들은 어떻게 풀었을까?
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double arr[] = new double[in.nextInt()];
for(int i = 0; i < arr.length; i++) {
arr[i] = in.nextDouble();
}
in.close();
double sum = 0;
Arrays.sort(arr);
for(int i = 0; i < arr.length; i++) {
sum += ((arr[i] / arr[arr.length-1]) * 100);
}
System.out.print(sum / arr.length);
}
}
이분은 배열을 선언해서 Arrays.sort로 오름차순 정렬을 했다.
오름차순을 하면 작은수부터 큰 순서대로 인덱스에 할당이 되기 때문에 length-1이 최대값이 된다.
아주 굳아이디어인거 같다.
느낀점
이제 for문을 다루는 것이 제법 익숙해졌다. 배열과 for문이 모두 어려웠지만 이젠 아무런 어려움을 주지 않는 다고 느껴지게 되었다.
'백준 > Bronze' 카테고리의 다른 글
[ 자바 ] 9093번 단어 뒤집기 문제풀이 (0) | 2023.07.20 |
---|---|
[코딩테스트] 백준 18108번 (0) | 2022.09.11 |
[코딩테스트] 백준 10926번 (0) | 2022.09.11 |
[코딩테스트] 백준 10869번 (0) | 2022.09.10 |
[코딩테스트] 백준 1008번 (0) | 2022.09.10 |