코딩테스트/자바 문제풀이

[새싹: 배열] 백준 10871, 10807, 5597, 2738

승요나라 2024. 7. 6. 19:01

10871번: X보다 작은 수

https://www.acmicpc.net/problem/10871

 

# 코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 문자열 분리를 위한 StringTokenizer (공백 기준)
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken());
        int x = Integer.parseInt(st.nextToken());

        // 수열 A를 담는 N 크기의 정수 배열 arr
        int arr[] = new int[n];

        // 둘째 줄(=수열 A) 문자열 분리를 위한 새로운 StringTokenizer 생성 (공백 기준)
        StringTokenizer st_2 = new StringTokenizer(br.readLine(), " ");

        // 매 반복마다 반환되는 토큰의 값을 배열에 저장
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st_2.nextToken());
        }

        // 수열 A의 원소가 X보다 작은 경우만 출력하기
        for (int i = 0; i < n; i++) {
            if (arr[i] < x) {
                bw.write(arr[i] + " ");
            }
        }

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤(flush) 닫기(close)
        bw.flush();
        bw.close();
    }
}

 

 


10807번: 개수 세기

https://www.acmicpc.net/problem/10807

 

# 코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 정수의 개수 N
        int n = Integer.parseInt(br.readLine());

        // 둘째 줄 문자열 분리를 위한 StringTokenizer 생성 (공백 기준)
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        // N 크기의 정수 배열 arr
        int arr[] = new int[n];

        // 매 반복마다 반환되는 토큰의 값을 배열에 저장
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        // 찾으려는 정수 V
        int v = Integer.parseInt(br.readLine());
        int count = 0;

        // V 개수 카운트
        for (int i = 0; i < n; i++) {
            if (arr[i] == v) {
                count++;
            }
        }

        // 개수 출력
        // BufferedWriter 출력은 String형으로 변환이 필요함
        bw.write(String.valueOf(count));

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • BufferedWriter 에서 정수를 출력할 때는 bw.write(String.valueOf(count)); 와 같이 String 형으로 변환을 해주어야 한다.
  • bw.write(count); 처럼 형변환 없이 작성할 경우 해당 정수가 아스키코드에 따른 문자로 출력되기 때문이다.
  • 간단하게는 bw.write(count + ""); 와 같이 자동 형변환을 이용할 수도 있다.

 


5597번: 과제 안 내신 분..?

https://www.acmicpc.net/problem/5597

 

# 코드

import java.io.*;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int arr[] = new int[30];

        // fill() 메소드를 이용해 arr 배열을 모두 0으로 초기화
        Arrays.fill(arr, 0);

        // 28명의 제출자를 배열에 표시
        for (int i = 0; i < 28; i++) {
            int submit = Integer.parseInt(br.readLine());
            arr[submit - 1] = 1;
        }

        // 배열에서 값이 0인 학생 출석번호 출력
        for (int j = 0; j < 30; j++) {
            if (arr[j] == 0) {
                bw.write(String.valueOf(j + 1) + "\n");
            }
        }

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • Arrays.fill(arr, 0); 구문을 이용해 배열 arr의 값을 모두 0으로 초기화할 수 있다.

 


2738번: 행렬 덧셈

https://acmicpc.net/problem/2738

 

# 코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // N, M 문자열 분리를 위한 StringTokenizer
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        // N * M 크기의 2차원 배열(=행렬) A, B 생성
        int[][] arr_a = new int[n][m];
        int[][] arr_b = new int[n][m];

        // 행렬 A
        for (int i = 0; i < n; i++) {
            // 매 행의 문자열 분리를 위한 StringTokenizer
            StringTokenizer st_a = new StringTokenizer(br.readLine(), " ");

            for (int j = 0; j < m; j++) {
                arr_a[i][j] = Integer.parseInt(st_a.nextToken());
            }
        }

        // 행렬 B
        for (int i = 0; i < n; i++) {
            // 매 행의 문자열 분리를 위한 StringTokenizer
            StringTokenizer st_b = new StringTokenizer(br.readLine(), " ");

            for (int j = 0; j < m; j++) {
                arr_b[i][j] = Integer.parseInt(st_b.nextToken());
            }
        }

        // 두 행렬을 더한 결과 행렬
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                bw.write(String.valueOf(arr_a[i][j] + arr_b[i][j]) + " ");
            }
            bw.write("\n");
        }

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • 2차원 배열을 선언할 때도 1차원 배열 때와 같이 int[][] arr; 또는 int arr[][]; 의 형식이 모두 가능하다.