문제: 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
첫째줄에는 테스트 케이스 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 첫 수로 정수 N(1<=N<=100)명의 학생이 주어지고 그 다음으로 N명의 0부터 100 사이의 점수가 이어서 주어진다.
(출처: https://www.acmicpc.net/problem/4344)
if문 문제가 아니라 for문 문제가 아니었나 싶은 문제.
for문 잘 받아서 점수 잘 올리면 된다.
(남들보다 코드는 짧은데 그에비해 시간과 용량이 상당히 느리고 크다. 다른 방법은 뭐가 있을까여 왜 나는 남들보다 느리지)
여기서 내가 배울 것은 바로 출력
나는 항상 매번 출력하는 형식을 외우는게 귀찮아서 매번 찾아서 풀었는데 이제는 찾는게 더 귀찮은 것 같다.
따라서 ★정리★는 여기 -> printf()메소드 정리
스프링만 하다가 오랜만에 알고리즘 푸니 재미있었다고 합니다. 풀 줄 아는 문제가 얼마 안 남아서 똥줄이 타들어가고 있지만.. 가끔 이렇게 하나씩 풀다보면 하나씩 늘어가겠지...
역시 이 문제도 마찬가지로 이클립스에서는 답이 나오는데 자꾸 채점에서는 틀렸다고 나왔다.
왜그런고 하니 바로
출력형식에 "\n" 줄바꿈 안해줘서...^^........
거지같은그 ㅇㅏ무튼 알고리즘 재미따
결과
ps. 주석을 안 달아서 미리 말하자면 pg는 평균, bj는 비중, good은 평균넘는 애들
클래스 이름이 sadstory인 이유는 문제가 너무 슬퍼서
...ㅋㅋㅋㅋ이해바람
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 34 35 36 37 38 39 | import java.util.Scanner; public class SadStory { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int C = scan.nextInt(); //케이스 숫자 int S = 0; //학생숫자 double score = 0; double pg = 0; double bj = 0; double good = 0; for(int i=0 ; i<C ; i++) { S = scan.nextInt(); double scores [] = new double[S]; for(int j=0 ; j<S ; j++) { scores[j] = scan.nextDouble();//학생마다 점수 받음 score = score + scores[j]; } //평균 pg = score/S; System.out.println("평균: " + pg); for(int k=0 ; k<S ; k++) { if(scores[k]>pg) { //학생이 평균을 넘을 때마다 카운트 늘리기 good++; } } // 평균 점수를 넘는 아이들의 비중을 구해야해 =>평균점수 넘는 아이들의 숫자를 구해야해 bj = (good/S)*100; System.out.printf("%.03f%%\n", bj); pg = 0; good = 0; bj = 0; score = 0; } scan.close(); } } | cs |
'건승하고있어요 > 알고리즘' 카테고리의 다른 글
[1차배열] OX 퀴즈 (0) | 2018.02.13 |
---|---|
[if] 더하기 사이클 (3) | 2018.02.12 |
[for] 2007년 달력문제 (0) | 2018.02.08 |
[소수] 소수찾기 (5) | 2018.02.07 |
[1차원배열] 숫자의 개수 (2) | 2018.02.07 |