Baekjoon10816: 숫자 카드2

Baekjoon10816: 숫자 카드2

숫자 카드 2

1 초 256 MB 49590 17969 12742 35.725%

문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 출력 첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지를 공백으로 구분해 출력한다.

풀이

카운팅 배열을 사용할 수 있다.

입력 받은 값에 100000000을 더해서 양수의 형태로 배열 안에 카운팅하고

M에서 입력받은 값들에도 10000000을 더해 index의 값을 찾아주면 된다

Buffer 사용

import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokenizer(br.readLine()," "); int[] arr = new int[20000001]; //숫자의 최대 개수 for(int i=0; i

Scanner 사용

import java.util.*; public class Main { public static void main(String[] args){ Scanner s=new Scanner(System.in); StringBuilder sb=new StringBuilder();//스트링빌더로 시간초과 방지 int[] arr=new int[20000001]; for(int i=s.nextInt();i>0;i--) arr[s.nextInt()+10000000]++; for(int i=s.nextInt();i>0;i--) sb.append(arr[s.nextInt()+10000000]+" "); System.out.print(sb); } }

from http://devyoseph.tistory.com/185 by ccl(A) rewrite - 2021-12-11 17:01:59