본문 바로가기
Code/baekjoon [ 단계별 ]

백준 단계별 문제 <배열>

by jaeaemin 2022. 2. 19.

백준 1546 자바

평균

 

1. 배열을 사용해서 푼 경우

Int형 배열을 선언하고 거기에 맞춰서 문제를 푼 경우는 아래와 같다.

package Array;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Q1546 {
    public static void main(String args[]) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int cnt = Integer.parseInt(bf.readLine());
        double maxNum = 0.0;
        double ans = 0;

        StringTokenizer st = new StringTokenizer(bf.readLine()," ");
        double[] data = new double[cnt];

        for(int i=0; i<cnt; i++){
            double tmp = Double.parseDouble(st.nextToken());
            if(maxNum<tmp) maxNum = tmp;
            data[i] = tmp;
        }

        for(int j=0; j<cnt; j++){
            ans += (data[j] / maxNum) * 100;
        }
        ans = ans/cnt;
        System.out.println(ans);
    }
}

 

 

2. ArrayList를 사용해서 푼 경우

ArrayList 함수를 이용해서 푼 경우

 

package Array;
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Q1546_2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cnt = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        ArrayList<Double> score = new ArrayList<>();

        for(int i=0; i<cnt; i++){
            score.add(Double.parseDouble(st.nextToken()));
        }
        Collections.sort(score);

        double maxNum = score.get(cnt-1);
        double ans = 0;

        for (double d : score){
            ans += (d/maxNum)*100;
        }
        System.out.print(ans/score.size());
    }
}

 

 

 

 

백준 8958 자바

OX퀴즈

 

 

package Array;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Q8958 {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //StringTokenizer st = new StringTokenizer();
        int caseCnt = Integer.parseInt(br.readLine());
        int[] score = new int[caseCnt];

        for(int i=0; i<caseCnt; i++){
            int lineScore = 0;
            int seqeunceScore = 0;
            String line = new String();
            line = br.readLine();
            for(int j=0; j<line.length(); j++){
                if(line.charAt(j)=='O') {
                    seqeunceScore++;
                    lineScore += seqeunceScore;
                }
                else {
                    seqeunceScore=0;
                }
            }
            System.out.println(lineScore);
        }

    }

}

 

 

 

 

 

백준 4344 자바

평균은 넘겠지

 

 

 

 

package Array;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Q4344 {
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int cnt = Integer.parseInt(br.readLine());
        for (int i=0; i < cnt; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int studentCnt = Integer.parseInt(st.nextToken());
            int[] lineScore = new int[studentCnt];
            double lineSum = 0.0;
            double lineAvg = 0.0;

            for(int j=0; j < studentCnt; j++){
                 int studentScore = Integer.parseInt(st.nextToken());
                 lineSum += studentScore;
                 lineScore[j] = studentScore;
            }
            lineAvg = lineSum / studentCnt;
            double rateCnt = 0;
            for(int s : lineScore){
                if(lineAvg < s) rateCnt++;
            }
            System.out.println(String.format("%.3f",rateCnt/studentCnt*100)+"%");
        }
    }
}

 

 

이 문제에서는 반올림에 대해서 간단하게 설명하고 지나가자 ! 

자바에서는 반올림하는 방법으로 String으로 처리하는 방법 , Map 함수를 사용하는 방법 크게 2가지로 구분할 수 있다.

 

 

 

(1) String으로 처리하는 방법 

 

String 클래스에 format 메서드를 사용하는 방법이다.

format 메서드는 문자열 형식을 지정하는 함수로, 이 함수는 Math.round() 함수와 같이 반올림을 String으로 나타낼 수 있다.

"%.(숫자)f" 로 String을 출력하는데 이때 숫자칸에는 반올림할 번째(자리)를 지정한다.

밑에서 예제와 같이 String 포맷 함수이기 때문에 3번째 자리를 기준으로 , . 를 연속으로 포맷할 수도 있다.

double num = 1.252525;
double ans = 4567.891
System,out.print(String.format("%.2f", num));
System.out.print(String.format("%.3f", num));
System.out.print(String.format("%,.3f", ans));

>> 3.14
>> 3.142
>> 4,424.243

 

 

 

 

(2) Math.round() 를 사용하여 처리하는 방법

 

Math 클래스의 round() 함수는 소수점 첫번째 자리를 반올림하여 정수로 리턴한다.

이를 응용하여 소수점 자리를 다르게 출력하는 것도 가능하다.

에를 들면 11.5555 를 round()함수를 사용하면 12.0 이 출력되지만

먼저 100을 곱한 뒤 ( 1155.555 ) round 함수를 사용하면 1156.0 이 계산된다.

그 뒤 다시 100을 나눠주면 11.56이 출력된다.

이는 11.5555를 소수점 2쨰 자리까지 반올림한 결과가 된다.

이렇게 사용하면서 원하는 소수점 자리를 반올림 할 수 있다.

( + 올림 : Math.cell()   ,   버림 : Math.floor() )

 

double num = 3.3456515;

System.out.println(Math.round(num));
System.out.println(Math.round(num*100) /100.0);
System.out.println(Math.round(num*1000) /1000.0);

>> 3
>> 3.34
>> 3.346

 

 

 

2가지 방법의 큰 차이

Math.round는 반올림 한 소수점 아래가 0일 경우 삭제하지만,

String.format()인 경우에는 그대로 리턴한다.

( 5000 vs 5000.000 )

반응형

'Code > baekjoon [ 단계별 ]' 카테고리의 다른 글

백준 단계별  (0) 2022.02.21
백준 단계별 문제 <함수>  (0) 2022.02.20
백준 단계별 문제 <1차원 배열>  (0) 2022.02.16
백준 단계별 문제 <for문>  (0) 2022.02.14
백준 단계별 문제 <if문 >  (0) 2022.01.20