코딩테스트/백준

백준 10807번: 개수 세기 [Java]

블로그 주인장 2023. 8. 14.

🎁 문제 링크

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

 

10807번: 개수 세기

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

www.acmicpc.net

🎁 문제 설명

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다

🎁 입출력 예시

🎁 코드 [Scanner& 배열]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        //처음 입력 : 정수의 갯수
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();

        //두 번째 입력 : 갯수에 맞는 정수 입력
        int[] iArray = new int[num];    
        for (int i = 0; i < num; i++) {
            int n = scanner.nextInt();
            
            iArray[i] = n;
        }
        
        //마지막 입력 : 찾으려는 정수
        int find = scanner.nextInt();

        //출력 : 찾는 정수의 갯수
        int count = 0;
        for (int i = 0; i < iArray.length; i++) {
            if(find == iArray[i]){
                count++;
            }
        }
        System.out.println(count);
    }
}
  • Scanner를 통해 입력을 받는다.
  • 처음에 입력받은 num을 통해 배열을 초기화시킨다.
  • 두 번째 입력받은 갯수에 맞게 배열에 대입해준다.
  • 세 번째 입력받은 정수에 찾으려는 정수와 같은 값이 있으면 count를 증가시켜 값을 도출시킨다.

🎁 코드 [BufferedReader & HashMap]

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

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

        HashMap<Integer, Integer> hashMap = new HashMap<>();
        while(st.hasMoreTokens()){
            int i = Integer.parseInt(st.nextToken());
            if(hashMap.containsKey(i)){
                hashMap.replace(i, hashMap.get(i) + 1);
            }
            else{
                hashMap.put(i, 1);
            }
        }

        System.out.println(hashMap.getOrDefault(V, 0));         
     }
}
  • BufferdReader를 통해 입력값을 받는다.
  • readline을 통해 Line 별로 값을 받는다.
  • HashMap를 선언하여 StringTokenizer에서 값을 하나씩 읽는다.
  • 읽은 값이 HashMap에 없으면 [key = i]를 넣고 값을 1을 넣는다.
  • 만약 값이 HashMap에 있으면 [Key= i] 값에 Value를 더해준다.
  • getOrDefault() 메소드를 이용하여 세 번째 입력한 정수 V가 있으면 해당 값 리턴, 없으면 0으로 리턴한다.

🎁 배열 vs HashMap 소요 시간

반응형

'코딩테스트 > 백준' 카테고리의 다른 글

백준 2830번 : 행성 X3 [Java]  (0) 2023.08.14
백준 9012번: 괄호 [Java]  (0) 2023.08.14
[Java][백준 1330번] : 두 수 비교하기  (0) 2023.08.14

댓글