[자바] 백준 1546 : 평균
문제
풀이
- 계산에는 오차범위가 있을 수 있기 때문에 연산할 때 최소한 자료형 1개 이상은 double형으로 쓰는게 좋다한다.
: 여기서 double 형으로 잡아준 것은 아래와 같다.
// 점수를 받아줄 배열
double scores[] = new double[num];
// 점수에서 가장 큰 값을 찾아 담아줄 변수
double maxScore = Arrays.stream(scores).max().getAsDouble();
// 점수들을 계산해 += 해줄 sum
double sum = 0;
- StringTokenizer 사용
: BufferedReader는 한 줄 단위로 입력을 받기 때문에
한 줄에 구분자를 경계로 여러 값이 입력된 경우라면
파싱이 필수이고 그때 StringTokenizer 을 사용한다.
// 사용한다고 객체 생성하고
StringTokenizer st = null;
// 공백을 기준으로 문자열을 쪼개 넣을것이라고 작성한 것이다.
st = new StringTokenizer(br.readLine(), " ");
- 가장 큰 값을 찾는 방법
: max 변수를 설정해 for문을 돌리며 값을 일일이 비교하는 방법도 있고
: 정렬을 해주고, 가장 끝 인덱스에 있는 수를 가져오는 방법도 있으며
: 배열을 스트림 형태로 만들어 준 뒤에 max(), min() 값으로 최대 최소 값을 찾은 뒤 getAsInt() 를 사용해 int 타입으로 꺼내올 수도 있다.
// 방법 1
int max = -999;
for(int i=0; i<scores.length; i++) {
if (max < 비교값) {
max = 비교값;
} else {
continue;
}
}
// 방법 2
Arrays.sort(scores);
double maxScore = scores[scores.length-1];
// 방법 3
double maxScore = Arrays.stream(scores).max().getAsDouble();
실제 제출 코드에서는 3번째 방법을 사용했다.
제출코드
public class Home {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
double scores[] = new double[num];
// 한 줄에 구분자를 경계로 여러 값을 입력할 것이기 때문에
// 공란을 경계로 값을 입력 받을 것이다
// StringTokenizer 객체 선언
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<scores.length; i++) {
// 배열에 직접 버퍼리더를 불러와 넣는것이 아닌
// 토큰을 불러와서 값을 넣어준다.
scores[i] = Double.parseDouble(st.nextToken());
}
double maxScore = Arrays.stream(scores).max().getAsDouble();
double sum = 0;
for(int i=0; i<scores.length; i++) {
sum += ((scores[i]/maxScore)*100);
}
}
}
Author And Source
이 문제에 관하여([자바] 백준 1546 : 평균), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cyhse7/자바-백준-1546-평균저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)