프로그래밍/java

[백준] 10807번 문제 - 개수 세기 - JAVA(자바)

MG_세대 2023. 6. 20. 21:25

문제

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


입력

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


출력

첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.


 

위 문제를 보고 처음엔 정수를 어떻게 공백을 사이에 두고 받을까 하는 고민에 빠졋다..

 

고민끝에 아직 포스팅 하지 않았지만, 단어의 개수 세기에서 사용했던 split 메서드를 사용해 보기로 마음먹고 다음과 같이

 

코드를 짜 보았다.

 

package baekjoon;

import java.util.*;

public class b10807 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt(); // 정수의 개수
       	 	sc.nextLine(); // 개행 문자('\n') 소비
		String B = sc.nextLine(); // 정수를 입력하지만 string값으로받아
		String arr[] = B.split(" "); // 공백을 기준으로 배열에 저장
		String C = sc.next(); // 스트링 으로 정수를 받는다
		int i ;
		int count = 0;
		
		for(i=0; i<A; i++) {
			if(arr[i].equals(C)) { // 문자열 비교 
				count += 1; // 카운트 + 1
			}
		}
		System.out.println(count);
	}

}

사실 맥북 이클립스에서 오류가 떠서 실행이 되지않았던걸..

chat-gpt에게 살짝 물어봐서 개행문자 소비 및 문자열 비교 구문 수정을 하니..

 

정상적으로 작동하였다..

 

백준에서도 맞다고 인정해줌...

 

아래에는 위 코드가 틀렸다고하여, 새로 만든 코드이다 아래의 방법이 조금더 보통의 방법이지 않나 싶다.

 

import java.util.Scanner;

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

		int A = sc.nextInt();
		int[] B = new int[A];
		int i;
		int count = 0;

		for (i = 0; i < A; i++) {
			B[i] = sc.nextInt();
		}
		int C = sc.nextInt();
		for (i = 0; i < A; i++) {
			if (B[i] == C) {
				count += 1;
			}
		}
		System.out.print(count);
	}

}

사실 처음에는 배열을 생성해서 첫 번째 for문까지 적었다가 스페이스바(공백)을 기준으로 입력을해도 입력이 되는지 모르고 포기하고 첫번째 방법으로 갔었었다..

 

하지만 나의 무지함이 문자열로도 정수를 받아 비교를 할 수 있는걸 알게된 개린이(개발자어린이)가 되었다.

 

이게..공부의 맛인듯 하다 너무재밌다 ㅎㅎ