문제
https://www.acmicpc.net/problem/1546
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
import java.util.Scanner;
public class Main1546 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
double[] scores = new double[N];
double max = 0;
double average = 0;
for(int i=0; i<scores.length; i++) {
scores[i] = sc.nextInt();
if (scores[i] > max) {
max = scores[i];
}
}
for(int i=0; i<scores.length; i++) {
scores[i] = (scores[i]/max)*100;
average += scores[i];
}
average = average/scores.length;
System.out.println(average);
}
}
1. 일단은 정답
2. 문제점은
첫째, for문 내에 if문(조건문)을 넣는 방식은 효율적이지 않다는 것을 책에서 읽은 적이 있다.
둘째, 코드를 더 간결히 할 수 있는 상태(이건 접근 방식보단 해결방식에서 차이기 때문에 생각의 습관을 꾸준하게 바꿔야 한다.)
3. 구글링 후 나보다 효율적으로 코드를 작성한 사례 두가지를 찾았다.
첫째,
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를 활용해 코드를 한 줄로 줄임으로써 for에서 if문 사용을 배제했다.
둘째,
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int arr[] = new int[T];
int max = 0;
int sum = 0;
double avg = 0.0;
for(int i=0; i<arr.length; i++) {
arr[i] = sc.nextInt();
if(arr[i] > max) {
max = arr[i];
}
sum += arr[i];
}
System.out.println("최대값 : " + max);
sc.close();
avg = 100.0 * sum / max / T;
System.out.println(avg);
}
}
접근 방식도 최대값을 구하는 과정도 나랑 굉장히 유사하다. 다만 평균을 구하는 과정에서 for문 하나로 처리하는 것을 알 수 있다. 이건 오랫동안 수학적 사고를 하지 않은 나의 불찰이지 싶다. 단순한 부분이지만 이런 식의 사고력을 조금씩 늘려야 겠다.
출처 : https://st-lab.tistory.com/47
[백준] 1546번 : 평균 - JAVA [자바]
https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이
st-lab.tistory.com
https://itprogramming119.tistory.com/118
[백준 알고리즘] 백준 1546번 평균 자바(JAVA)
소스 코드 package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); int arr[] = new i..
itprogramming119.tistory.com
'백준' 카테고리의 다른 글
백준 4673번 (0) | 2022.10.26 |
---|---|
백준 2738번 (0) | 2022.10.26 |
백준 5597번 Java (0) | 2022.10.25 |
백준 2438번 220914 (0) | 2022.09.14 |
백준 10950번 220914 (0) | 2022.09.14 |