반응형
문제: 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최대값을 골랐다. 이 값을 M이라 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어 세준이의 최고점이 70점이고 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했을 때 새로운 평균을 구하는 프로그램을 작성하시오.
(출처: https://www.acmicpc.net/problem/1546)
잊지말자 ★데이터타입★
순전히 자료형 생각 못해서 자꾸 바보같이 굴었던 문제.
for(int i=0 ; i<N ; i++) {
array[i] = (array[i]/M)*100;
a+=array[i];
}
문제가 됐던 부분이다. 이부분만 지나면 가장 큰 수를 제외하고는 모두 0이 되는 기적..
도대체 이해가 안 됐다. 왜 자꾸 여기만 지나면 0이 되는가ㅠ_ㅠ 바보멍청이
당연히 int 60을 int 80으로 나누니까 0이나오지ㅠ_ㅠ 바보야! 바보야!!
double array[] = new double [N];
지금 이 코드에서는 배열을 double로 선언했지만 처음엔 int로 받았다.
점수니까 당연히 그렇겠거니 했는데, 바보같이!! 바보같이!!!!!
그러니 당연히 계속 0이 나오지ㅠ0ㅠ
더블로 바꾸자 모든 것이 해결되었습니다.
(int는 정수형이기 때문에 0.xxxxxxxx가 답이라면 x는 다 빠지고 0만 나오기 때문입니다. 그렇기 때문에 실수를 받을 수 있는 double로 선언해주어야 하는거십니다니다니다니다.)
그리고 소수점을 원하는 형식으로 출력하는 방법
printf로 정해주는 방법도 있지만, DecimalFormat이라는 클래스가 있다.
DecimalFormat form = new DecimalFormat("#.##");
int num = a/N
form.format(num);
int num = a/N
form.format(num);
#.##은 소숫점 2째자리까지 보여달라는 말이다.
#.###하면 3자리, #.###### 하면 6자리가 나온다.
보면 61.90이 나와야 하는데 마지막 0이라 알아서 빼고 출력해준 모양..
사실은 저렇게 긴 답인데 뚝 잘라줬다. 고마워 데시말!!!
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 | import java.text.DecimalFormat; import java.util.Scanner; public class TestRecord2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); double array[] = new double [N]; double M = array[0]; for(int i=0 ; i<N ; i++) { array[i] = scan.nextInt(); if(M < array[i]) { M = array[i]; } } double a = 0; for(int i=0 ; i<N ; i++) { array[i] = (array[i]/M)*100; a+=array[i]; } DecimalFormat form = new DecimalFormat("#.##"); System.out.println(form.format(a/N)); scan.close(); } } | cs |
반응형
'건승하고있어요 > 알고리즘' 카테고리의 다른 글
[1차원배열] 숫자의 개수 (2) | 2018.02.07 |
---|---|
[if] X보다 작은 수 (2) | 2018.02.07 |
[queue] 큐 기본문제와 상속 (8) | 2018.02.06 |
[for] 열 개씩 끊어 출력하기 (9) | 2018.02.05 |
[stack] 스택 기본문제 (2) | 2018.02.04 |