문제 이름 : 개수 세기
문제
총 N
개의 정수가 주어졌을 때, 정수 v
가 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N
(1 <= N
<= 100) 이 주어진다.
둘째 줄에는 정수가 공백으로 구분되어져있다.
셋째 줄에는 찾으려고 하는 정수 v
가 주어진다.
입력으로 주어지는 정수와 v
는 -100
보다 크거나 같으며, 100
보다 작거나 같다.
(-100 <= 입력정수, v
<= 100)
출력
첫째 줄에 입력으로 주어진 N
개의 정수 중에 v
가 몇 개인지 출력한다.
예제 입력 1
11
1 4 1 2 4 2 4 2 3 4 4
2
예제 출력 1
3
예제 입력 2
11
1 4 1 2 4 2 4 2 3 4 4
5
예제 출력 2
0
이 문제는 각 프로그래밍 언어에서 배열(Array)에 대한 기초적인 이해를 필요로 하며,
배열의 선언과 할당, 그리고 배열의 인덱스에 접근하는 것을 목표로 한다.
즉, 요약하자면 위의 목표를 집중 하는 것이 주된 관심사이다.
그렇다면, 먼저 배열이란 무엇인가?
개인적으로 배열 에 대한 이해도가 있어야 추후 알고리즘 문제에 있어,
점진적인 실력 향상에 도움이 될 것이라고 확신 한다.
그래서, 1 차원 배열 단계의 첫 번째 문제이자, 대표적인 문제로서
배열의 속성에 대해서 먼저 짚고 넘어가보자 한다.
배열이란 무엇인가?
먼저 배열이란, 순차 접근이 가능한 요소들의 줄 이라고 생각하면 된다.
Primitive 타입이란, 단순히 int
, double
, long
등등과 같이,
굳이 힙(Heap) 영역에 주소를 등록 할 필요가 없는 상대적으로 작은 변수를 의미한다. (틀리면 댓글 부탁드려요!)
하지만 배열(Array) 는, 힙 메모리에 직접 필요한 만큼 할당 하여,
배열에 값을 집어넣을 준비를 한다.
그런데, 여기서 주목해야 할 것은, 배열 자체는 값 을 의미하지 않는다.
물론 값 을 출력한다면 메모리 주소가 나올 수도 있지만,
이는 배열 내부의 값을 접근 하는 것이 아니라는 얘기이다.
따라서, 배열 자체를 인자로 또다른 클래스 혹은 메서드 에 전달한다면,
내부의 값이 전부 복사되어 새로운 배열을 생성하는 것이 아니라, 메모리의 주소 를 전달하여,
굳이 메모리에 배열의 공간을 확보하고, 이를 복사하는 정말 비효율적인 과정을 스킵한다.
이는 배열 뿐만 아니라, 객체 또한 해당되는 얘기이므로, 이를 기억하는 것이 진짜 중요하다고 생각한다.
객체들 또한 배열 에 저장할 수 있지만, 내부에는 객체 자체가 아닌, 객체의 주소 가 배열에 순차적으로 저장된다.
이는 나중에 자료구조를 활용하거나, 직접 만들 때 정말로 중요한 내용이므로 숙지했으면 좋겠다.
다시 돌아와서, 배열의 선언, 배열 내용물의 접근, 비교 카운트 에 초점을 맞춰서 코드를 제작 해 보자.
만약에 찾아야 하는 수 가 배열의 내용물보다 위에 있었다면, 사실 배열이 필요 없기도 하지만,
여기서는 배열의 순차 내용이 먼저 나온다.
Answer - 배열 저장 후, 비교
import java.util.*;
import java.io.*;
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());
// n 만큼의 int 배열 메모리 생성
int[] arr = new int[n];
// " " 델림을 사용하여 각 단어별 토큰 분리해주는 클래스
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < arr.length; i++)
arr[i] = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(br.readLine());
// 개수를 셀 result 변수 선언
int result = 0;
for(int i = 0; i < arr.length; i++)
result = (arr[i] == v) ? result + 1 : result;
System.out.println(result);
}
}
틀린 부분이 있다면, 지적 부탁드립니다!
'백준-단계별로 풀어보기 > 4-1차원 배열' 카테고리의 다른 글
백준 10811 - 바구니 뒤집기 (0) | 2024.09.06 |
---|---|
백준 3052 - 나머지 (0) | 2024.09.05 |
백준 10810 - 공 넣기 (3) | 2024.08.28 |
백준 10818 - 최소, 최대 (0) | 2024.08.28 |