본문 바로가기
Algorithm(알고리즘)/Java

Java 백준 단계별 풀기 (기초 문법 정리) 배열

by Jun_N 2020. 12. 24.

10818 - 최소, 최대

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int max = -1000000, min = 1000000;
        st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            int value = Integer.parseInt((st.nextToken()));
            if (value > max)
                max = value;
            if (value < min)
                min = value;
        }
        System.out.println(min + " " + max);
    }
}

 

2577 - 숫자의 개수 

방법 1 ) 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();
        String multi = Integer.toString(A * B * C);
        for (int i = 0; i < 10; i++) {
            int count = 0;
            for (int j = 0; j < multi.length(); j++) {
                if ((multi.charAt(j) - '0') == i) {
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}

 

방법 2 ) array 사용

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();
        String multi = String.valueOf(A * B * C);
        int[] arr = new int[10];
        for (int i = 0; i < multi.length(); i++) {
            arr[(multi.charAt(i) - '0')]++;
        }
        for (int v : arr) {
            System.out.println(v);
        }
    }
}

Tips

1. charAt()은 문자열에서 index값에 위치한 값을 꺼내올 수 있다.

2. String.valueOf와 Integer.toString은 String -> int 형으로 바꿔준다.

3. char에서 '0'을 빼주면 아스키값을 계산할 필요 없이 자동으로 int형이 된다.

4. for (int v : arr) 을 하게 되면 arr 끝까지 for문을 돈다.

 

 

3052 - 나머지 (Hashset)

import java.util.HashSet;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<Integer> h = new HashSet<Integer>();

        for (int i = 0; i < 10; i++) {
            h.add(Integer.parseInt(br.readLine()) % 42);
        }

        System.out.print(h.size());
    }
}

Tips

1. Hashset은 중복이 있으면 배열에 저장하지 않는다.

2. HashSet에서 add는 추가

3. HashSet의 size는 중복을 제거한 수

 

4344 - 평균은 넘겠지

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int[] arr;
		
		int testcase = Integer.parseInt(br.readLine());
		StringTokenizer st;
		
		for(int i = 0 ; i < testcase ; i++) {
 
			st = new StringTokenizer(br.readLine()," "); // 학생 수 및 성적 입력
			
			
			int N = Integer.parseInt(st.nextToken());	//학생 수 
			arr = new int[N];
			
			double sum = 0;	// 성적 누적 합 변수 
			
			// 성적 입력부분 
			for(int j = 0 ; j < N ; j++) {
				int val = Integer.parseInt(st.nextToken());	// 성적 저장
				arr[j] = val;
				sum += val;	// 성적 누적 합 
			}
			
			double mean = (sum / N) ;
			double count = 0; // 평균 넘는 학생 수 변수 
			
			// 평균 넘는 학생 비율 찾기 
			for(int j = 0 ; j < N ; j++) {
				if(arr[j] > mean) {
					count++;
				}
			}
			
			System.out.printf("%.3f%%\n",(count/N)*100);
			
	
		}
	}
	
}

 

br.readLine()은 한 줄을 읽는 것.