성장일기

내가 보려고 정리하는 공부기록

코딩테스트/백준 브론즈,실버

[백준] 10807 : 개수 세기 (Stream 이용하기) - JAVA

와나나나 2024. 1. 9. 00:00
728x90

백준 단계별 문제풀이 4단계 (1차원 배열)

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

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

 

# 문제

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

정수의 개수가 첫째줄, 배열이 둘째줄, 정수 v가 셋째줄에 입력된다.

 

# 예제

입력 

11
1 4 1 2 4 2 4 2 3 4 4
2

 

출력

3

 

# 필요개념

배열 전체를 for문으로 돌면서 카운트 하는 방법도 있지만, 이번에는 자바를 공부하면서 알게 된 개념인 Stream을 이용하여 풀어보려고 한다.

 

Stream은 자바8부터 지원하기 시작한 기능으로, 요소들을 모두 순회하며 처리해서 반복문 대신 사용할 수도 있다.

배열은 스트림을 직접 생성할 수 없기 때문에 Arrays.stream()을 사용해 생성해주고, filter를 사용해 조건에 맞게 필터링 작업을 거쳤다.

(관련 내용은 따로 업로드 후 링크를 달아둘 예정이다)

 

 

# Code

1. stream 이용

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();
        int[] arr = new int[size];

        for (int i = 0 ; i < size ; i++) {
            arr[i] = sc.nextInt();
        }
        int same = sc.nextInt();
        System.out.print(Arrays.stream(arr).filter(i -> i == same).toArray().length);
    }
}

 

2. for문 이용

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();
        int[] arr = new int[size];

        for (int i = 0 ; i < size ; i++) {
            arr[i] = sc.nextInt();
        }
        int same = sc.nextInt();
        int cnt = 0;

        for (int i = 0 ; i < size ; i++) {
            if (arr[i] == same) cnt++;
        }

        System.out.println(cnt);
    }
}

 

 

# 결과

위 - for문 / 아래 - stream