Little cabin in the woods

[백준] 10807. 개수 세기 (JAVA) 본문

STUDY/알고리즘&코딩테스트

[백준] 10807. 개수 세기 (JAVA)

Y... 2024. 11. 4. 11:36

이번에 풀어 볼 문제는 <백준 10807번.  개수 세기>이다.

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

📌 문제 탐색하기

목표

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하기

해야 할 것

1. N개의 정수 저장하기

2. 각 정수와 v 비교하기

입력

[첫줄] N :  정수의 크기 ( 1 ≤ n ≤ 100 )

[둘째줄] 정수 ( 공백으로 구분)

[셋째줄] v ( -100 ≤ x ≤ 100 )

아이디어

1. 정수의 개수 N이 100 이하이므로 하나씩 탐색하며 비교해도 가능하겠다.

 

📌 코드 설계하기

1. input 정수를 받고, 배열로 저장한다. v의 개수를 셀 변수 count를 초기화한다.

2. 배열의 각 원소들을 하나씩 탐색하며 v 와 비교한다.

3. 현재 원소가 v와 같다면 count++

4. 모든 원소를 탐색 완료하면 count를 출력한다.

📌 정답 코드


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));
    int n = Integer.parseInt(br.readLine());
    int[] arr = new int[n];
    int count = 0;

    StringTokenizer st = new StringTokenizer(br.readLine());
    for (int i =0; i<n; i++){
      arr[i] = Integer.parseInt(st.nextToken());
    }

    int v = Integer.parseInt(br.readLine());

    for(int i =0; i<n; i++){
      if (arr[i] == v){
        count++;
      }
    }

    System.out.println(count);

  }
}

 

➡️ n개의 원소를 하나씩 탐색하기 때문에 전체 시간복잡도는 O(n)

📌 알게 된 것

br.readLine().split(" ") vs StringTokenizer

br.readLine().split(" ") 

  • readLine() 으로 한 줄의 문자열을 읽고, split(" ")을 사용해서 공백을 기준으로 문자열을 분리함
  • 분리된 문자열이 들어가 있는 배열을 반환

StringTokenizer

  • nextToken() 메서드를 호출할 때마다 토큰을 추출해서 반환
    ( 미리 전체 토큰을 메모리에 저장해두는 것이 아니기 때문에 메모리 사용량이 적고 빠름 )
  • 여러개의 공백이 있어도 이를 하나의 구분자로 고려