본문 바로가기

JAVA/[백준] 코테

[백준]_배열 10807번 개수 세기 - 자바(JAVA)

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

 

10807번: 개수 세기

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

www.acmicpc.net


  • 문제


  • 풀이

맨 처음 생각한 코드!

 

	/*
	 * 배열 생성 방법은 2가지이다.
	 * 1. 데이터들의 값을 알고 있을 때
	 * 
	 * 형태:
	 * 자료형[] 변수 = {데이터1, 데이터2,...}
	 * 
	 * 예시 : 
	 * int[] num = {1, 2, 3}
	 * 
	 * 2. 배열의 값은 모르지만, 향후 값을 저장하기 위한 배열 생성
	 * 
	 * 형태 :
	 * 자료형[] 변수 = new 자료형[배열크기];
	 * 변수[0] = 데이터 값;
	 * 변수[1] = 데이터 값;
	 * 
	 * 예시 : 
	 * int[] num = new int[3];
	 * num[0] = 10;
	 * num[1] = 15;
	 * num[2] = 13;
	 * 
	 * 현재, 총 N개의 정수가 주어졌을 때 정수 v가 몇개인 지 구하는 프로그램이다.
	 * 따라서 2번의 방법을 사용한다. 
	 *  
	 */

    public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] num = new int[11];
		System.out.println("배열의 수를 입력하세요");
		System.out.println("배열안에 들어갈 정수를 입력하세요");
		Scanner sc2 = new Scanner(System.in);
		System.out.println("배열에서 찾으려는 정수를 입력하시오");
		int find = sc2.nextInt();
		
		for(int i = 0; i < num.length; i++) {
			num[i] = sc.nextInt();
		}
		
		int n=0;
		for(int i = 0; i < num.length; i++) {
			if (find == num[i]) {
				n+=1;
			}
		}
		System.out.println(n);

	}

}

잉.. 왜 안되지?? 순서가 잘못된 것 같다..

처음 sc변수를 입력한 뒤, 배열이 생성되고 sc2를 실행하기 전에 for문이 실행되어 배열 안에 숫자를 저장한다.

그 후 프로그램이 끝나서 sc2는 실행되지 않고 종료된다.

그래서 순서를 바꾸었다!

 

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] num = new int[11];
		System.out.println("배열의 수를 입력하세요");
		System.out.println("배열안에 들어갈 정수를 입력하세요");
		
		for(int i = 0; i < num.length; i++) {
			num[i] = sc.nextInt();
		}
		
		Scanner sc2 = new Scanner(System.in);
		System.out.println("배열에서 찾으려는 정수를 입력하시오");
		int find = sc2.nextInt();
		
		int n=0;
		for(int i = 0; i < num.length; i++) {
			if (find == num[i]) {
				n+=1;   //n++
			}
		}
		System.out.println(n);
	}

}

바꾼 후에는 잘 실행된다. 

그런데.. 실행결과가 마음에 들지 않는다. print문이 단계별로 진행될 때마다 나왔으면 좋겠다.

그래서 배열의 수를 11개로 정하지 않고, 변수로 놓았다.

그리고, 스캐너를 또 만들 필요가 없는 것 같아서(스캐너도 다시 공부하기 !!) 지웠다.

 

public static void main(String[] args) {
		System.out.println("배열의 수를 입력하세요");
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] num = new int[N];
		
		System.out.println("배열안에 들어갈 정수를 입력하세요");
		for(int i = 0; i < num.length; i++) {
			num[i] = sc.nextInt();
		}
		
		System.out.println("배열에서 찾으려는 정수를 입력하시오");
		int find = sc.nextInt();
		
		int n=0;
		for(int i = 0; i < num.length; i++) {
			if (find == num[i]) {
				n+=1;
			}
		}
		System.out.println(n);

	}

}

최종결과화면(굿!)

 

백준 채점에 넣을 때는 class명은 Main으로 하고, print문을 빼서 넣어야 한다.


  • 정답
public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] num = new int[N];
		
		for(int i = 0; i < num.length; i++) {
			num[i] = sc.nextInt();
		}
		
        int find = sc.nextInt();
		int n=0;
        
		for(int i = 0; i < num.length; i++) {
			if (find == num[i]) {
				n+=1;
			}
		}
		System.out.println(n);

	}

}

  • 참고 블로그

https://m.blog.naver.com/heartflow89/220950491600

 

[JAVA/자바] 배열(Array) 선언 및 사용 방법

배열이란? 동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료구조이다. 즉, ...

blog.naver.com

참고한 배열 개념 블로그이다.

'JAVA > [백준] 코테' 카테고리의 다른 글

[백준]_배열 10807번 개수 세기 - 자바(JAVA)  (1) 2022.12.20