https://www.acmicpc.net/problem/4344
첫 번째 시도:
입력받기->각 줄 평균 구하기->평균 넘는 학생 구하기->평균 넘는 학생 비율 구하기
이렇게 크게 4개로 쪼개어 생각 시작. 코딩시작
문제점:
각 줄 평균 구하는 것 되는데 각 줄 평균을 넘는 학생을 구하는데 배열 인덱스? 가 꼬여버림. 학생의 점수를 저장하는데 다차원 배열로 저장해야하나? 싶음.
package till;
import java.util.*;
public class Main {
private static final int[] Kaprekar = null;
public static void main(String[] args){
//입력받기
Scanner scan=new Scanner(System.in);
int t_case=scan.nextInt();
int[] score = new int[1000];//각 학생 점수 저장
int temp=0;//평균구할때 쓸 총합 변수
int[] average= new int[100];
for(int i=0;i<t_case;i++){
int student_num=scan.nextInt();
//int[] average = new int[student_num];//인덱스마다 케이스의 평균을 저장
for(int j=0;j<student_num;j++){
score[j]=scan.nextInt();
temp=temp+score[j];
}
average[i]=temp/student_num;//각 줄 평균 구하기
System.out.println(average[i]);
temp=0;
}
//평균 넘는 학생 구하기
for(int i=0;i<t_case;i++){
for(int j=0;j<score.length;j++){
if(average[i]<score[j]){
System.out.println("평균넘는애들: "+score[j]);
}
}
}
//평균 넘는 학생 비율 반올림하기
}
}
두 번째 시도: 첫 번째 시도에서 발생한 문제점은 생각한대로 다차원 배열로 하니까 풀림~
다차원 배열의 필요성,,
package till;
import java.util.*;
public class Main {
private static final int[] Kaprekar = null;
public static void main(String[] args){
//입력받기
Scanner scan=new Scanner(System.in);
int t_case=scan.nextInt();
int[][] score = new int[100][1000];//각 학생 점수 저장
int temp=0;//평균구할때 쓸 총합 변수
int[] average= new int[100];
for(int i=0;i<t_case;i++){
int student_num=scan.nextInt();
//int[] average = new int[student_num];//인덱스마다 케이스의 평균을 저장
for(int j=0;j<student_num;j++){
score[i][j]=scan.nextInt();
temp=temp+score[i][j];
}
average[i]=temp/student_num;//각 줄 평균 구하기
System.out.println(average[i]);
temp=0;
}
//평균 넘는 학생 구하기
for(int i=0;i<t_case;i++){
for(int j=0;j<score.length;j++){
if(average[i]<score[i][j]){
System.out.println("평균넘는애들: "+score[i][j]);
}
}
}
//평균 넘는 학생 비율 반올림하기
}
}
세 번째 시도:
문제점:
세 번째 자리 반올림 어떻게 하는지 모름
-> Math.round() 예제
double pie = 3.14159265358979;
System.out.println(Math.round(pie)); //결과 : 3
System.out.println(Math.round(pie*100)/100.0); //결과 : 3.14
System.out.println(Math.round(pie*1000)/1000.0); //결과 : 3.142
네 번째 시도:
문제점:
평균 보다 높은 애들의 수도 잘 구해짐.
그리고 각 케이스마다 아이들의 수도 잘 구해짐.
그리고 자바로 퍼센트 구하는 방법도 알게됨.
그런데 결과값이 이상하게 나옴. 계속 0이 나옴.
package till;
import java.util.*;
public class Main {
private static final int[] Kaprekar = null;
public static void main(String[] args){
//입력받기
Scanner scan=new Scanner(System.in);
int t_case=scan.nextInt();
int[][] score = new int[100][1000];//각 학생 점수 저장
int[] score_num=new int[100];
int temp=0;//평균구할때 쓸 총합 변수
int[] average= new int[100];//인덱스마다 케이스의 평균을 저장하기 위해
int top=0;
double result=0;
for(int i=0;i<t_case;i++){
int student_num=scan.nextInt();
score_num[i]=student_num;
for(int j=0;j<student_num;j++){
score[i][j]=scan.nextInt();
temp+=score[i][j];
}
average[i]=temp/student_num;//각 줄 평균 구하기
System.out.println(average[i]);
temp=0;
}
//평균 넘는 학생 구하기
for(int i=0;i<t_case;i++){
for(int j=0;j<score_num[i];j++){
if(average[i]<score[i][j]){
System.out.println("평균넘는애들: "+score[i][j]);
top++;
}}result=((top/score_num[i])*100.0);
System.out.println("top은 "+top);
System.out.println("score_num은 "+score_num[i]);
top=0;
System.out.println("비율: "+Math.round(result*1000)/1000.0);;
}
//평균 넘는 학생 비율 반올림하기
}
}
다섯 번째 시도:
해결!
비율 구하는 부분에서
정수의 경우에는 (double) 로 실수화시키지 않으면 0.0 이라는 엉뚱한 값이 나옴. 맨 끝의 + "%" 이 부분은 공식의 일부가 아니라 퍼센트 기호 출력
실수를 double화 시켜야 했음!
문제점:
값이 깔끔하게 0으로 떨어질때 세번째 소수점까지 나오지 않는 문제가 있음 //System.out.println(Math.round(result*1000)/1000.0+"%");//평균 넘는 학생 비율 반올림하기
package till;
import java.util.*;
public class Main {
private static final int[] Kaprekar = null;
public static void main(String[] args){
//입력받기
Scanner scan=new Scanner(System.in);
int t_case=scan.nextInt();
int[][] score = new int[100][1000];//각 학생 점수 저장
int[] score_num=new int[100];
int temp=0;//평균구할때 쓸 총합 변수
int[] average= new int[100];//인덱스마다 케이스의 평균을 저장하기 위해
int top=0; //평균 넘는 학생 수를 저장
double result;
for(int i=0;i<t_case;i++){
int student_num=scan.nextInt();
score_num[i]=student_num;
for(int j=0;j<student_num;j++){
score[i][j]=scan.nextInt();
temp+=score[i][j];
}
average[i]=temp/student_num;//각 줄 평균 구하기
//System.out.println(average[i]);
temp=0;
}
//평균 넘는 학생 구하기
for(int i=0;i<t_case;i++){
for(int j=0;j<score_num[i];j++){
if(average[i]<score[i][j]){
top++;
}
}
//System.out.println("top은 "+top);
//System.out.println("score_num은 "+score_num[i]);
result=(double)top/(double)score_num[i]*100.0;//학생 수 중 비율 넘는 아이들의 퍼센트는?
//반올림해서 출력
System.out.println("반올림 비율: "+Math.round(result*1000)/1000.0);//평균 넘는 학생 비율 반올림하기
top=0;
}
}
}
여섯 번째 시도:
package till;
import java.util.*;
public class Main {
private static final int[] Kaprekar = null;
public static void main(String[] args){
//입력받기
Scanner scan=new Scanner(System.in);
int t_case=scan.nextInt();
int[][] score = new int[100][1000];//각 학생 점수 저장
int[] score_num=new int[100];
int temp=0;//평균구할때 쓸 총합 변수
int[] average= new int[100];//인덱스마다 케이스의 평균을 저장하기 위해
int top=0; //평균 넘는 학생 수를 저장
double result;
for(int i=0;i<t_case;i++){
int student_num=scan.nextInt();
score_num[i]=student_num;
for(int j=0;j<student_num;j++){
score[i][j]=scan.nextInt();
temp+=score[i][j];
}
average[i]=temp/student_num;//각 줄 평균 구하기
//System.out.println(average[i]);
temp=0;
}
//평균 넘는 학생 구하기
for(int i=0;i<t_case;i++){
for(int j=0;j<score_num[i];j++){
if(average[i]<score[i][j]){
top++;
}
}
//System.out.println("top은 "+top);
//System.out.println("score_num은 "+score_num[i]);
result=(double)top/(double)score_num[i]*100.0;//학생 수 중 비율 넘는 아이들의 퍼센트는?
//반올림해서 출력-방법1-> 이건 값이 깔끔하게 0으로 떨어질때 세번째 소수점까지 나오지 않는 문제가 있음
//System.out.println(Math.round(result*1000)/1000.0+"%");//평균 넘는 학생 비율 반올림하기
//반올림해서 출력-방법2
System.out.printf("%.3f",result);
System.out.println("%");
top=0;
}
}
}
'ALGORITHM > 푼 문제들&과정' 카테고리의 다른 글
[JAVA] 백준 1110번 (0) | 2019.03.03 |
---|---|
[JAVA] 백준 1065번 (0) | 2019.03.03 |
[JAVA] 백준 4673번 (0) | 2019.02.26 |
[JAVA] 백준 10817번 (0) | 2019.02.01 |
[JAVA] 백준 1924번 (0) | 2019.01.31 |
Comments