be_better

[백준] 10807번 - 개수 세기 본문

코딩테스트/백준

[백준] 10807번 - 개수 세기

NiceTry 2023. 8. 15. 04:35

목차

    💎 문제 링크

     

    10807번: 개수 세기

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

    www.acmicpc.net

     

    📝 문제

     

    ✍🏻 입력 & 출력

     

    🤔 풀기 전에 생각하기

    기본적인 빈도 수 문제

    입력받는 데이터가 int 정수형이기 때문에 배열의 인덱스로 쉽게 빈도수를 증가시킬 수 있다.

     

    입력받는 데이터는 -100부터 100이기 때문에 배열의 크기를 201로 맞춰야 한다.

     

    ✨ 풀이

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args){
    
            Scanner scanner = new Scanner(System.in);
    
            int N = scanner.nextInt(); // N 입력
            int[] frequency = new int[201]; // 빈도수 저장 -100부터 100까지의 정수 총 201개
    
            for (int i = 0; i < N; i++) {
                int n = scanner.nextInt();
                frequency[n+100]++; // -100을 입력받으면 100을 더해서 0번 인덱스에 저장
            }
    
            int value = scanner.nextInt();
    
            System.out.println(frequency[value+100]); // 입력할 때 100을 더해줬기 때문에 찾는값도 100을 더해줌
    
        }
    }

     

    이 문제는 -100부터 100이기 때문에 배열의 크기를 많이 할당하지 않아도 된다.

    하지만 숫자가 더 커지면 메모리상 에러를 일으킬 수 있기 때문에

    입력받는 값을 배열에 그대로 넣고 원하는 데이터와 배열의 값이 같다면 count를 증가시키는 코드로도 해결할 수 있다.

    int[] arr = new int[N]; // N의 크기의 배열 선언
    for (int i = 0; i < N; i++) {
    	arr[i] = scanner.nextInt(); // 배열에 입력받는 수 그대로 추가
    }
    
    int value = scanner.nextInt(); // 찾는 값 입력
    
    int count = 0;
    for (int i : arr) {
    	if (i == value) {
        	count++; // 배열을 돌면서 찾는값과 같다면 count 증가
        }
    }