알고리즘/백준
[백준] 1546 - 자바
삼록이
2025. 7. 16. 11:23
https://www.acmicpc.net/problem/1546
슈도코드?
- 시험과목 수 n을 입력 받는다.
- 성적을 int형 배열에 담아야하니, String으로 받아 StringTokenizer로 각각 점수를 분리해 담는다
- for문을 돌리면서 배열에 각각 담으면서 동시에 최고점수를 파악한다.
- 최고점수를 파악하기 위해 for문 바깥에 int형 변수를 하나두고 for문 내부에서 최고점수가 나올때마다 변수값을 갱신해준다.
- 다시 for문을 돌려 각 점수에*최고점수 / 100 한 값을 누적한다.
- 마지막으로 n으로 나눠 평균을 낸다.
이번 풀이
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] originalScores = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int max =0;
for(int i=0; i<n; i++){
originalScores[i] = Integer.parseInt(st.nextToken());
if(max<originalScores[i]){
max=originalScores[i];
}
}
double fakeScoresSum =0;
for(int s : originalScores){
fakeScoresSum+= ((double) s /max) *100;
}
double answer = fakeScoresSum / n;
System.out.println(answer);
}
}
백준에 남아있던 예전에 풀었던 풀이1... 이게 더 간결해보인다.
여기서 for문을 한번만 써도 되는 이유는 위에서는 for문을 한 번 더 돌려 각 점수를 가짜점수를 변환하였기 때문이다. 그리고 나서 가짜 점수들을 다 더하고 갯수로 나눠 평균을 구했다.
그런데 여기서는 가짜점수로 변환하는 과정을 한번에 처리했는데 이는,
점수a / 최댓값 *100 + 점수b/최댓값 *100 + 점수c/최댓값*100 은 사실 (a+b+c) / 최댓값*100과 같기 때문이다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int max = -1;
double sum =0.0;
for(int i =0; i<n; i++){
int a = Integer.parseInt(st.nextToken());
sum+=a;
if(a>max){
max =a;
}
}
System.out.println((sum / max) * 100 / n);
}
}
예전에 풀이2
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
double drr[] = new double[n];
double sum =0;
for(int j =0; j<n; j++){
drr[j] =((double)arr[j] / arr[n-1]) * 100;
sum += drr[j];
}
System.out.println(sum / n);
}
}