https://www.acmicpc.net/problem/10816
백준 10816번 숫자 카드 2 문제 링크입니다.
핵심
이 문제는 처음 제시된 숫자 중에서 아래 제시된 숫자가 몇 번 나왔는지를 체크하는 것이다. 핵심은 HashMap을 사용하는 것이다.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashMap<Integer,Integer> hash = new HashMap<>();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
int input = Integer.parseInt(st.nextToken());
if(hash.get(input)==null)hash.put(input, 1);
else hash.put(input,hash.get(input)+1);
}
int M = Integer.parseInt(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i=0;i<M;i++) {
int input = Integer.parseInt(st2.nextToken());
if(hash.get(input)==null)sb.append("0 ");
else sb.append(hash.get(input)).append(" ");
}
System.out.println(sb);
}
}
풀이
HashMap을 사용하는데, key값은 제시된 숫자를 value는 나온 횟수를 카운트하기 위함이다.
숫자를 공백으로 구분하여 key값을 대입한다.
만약 key값이 없다면, 키를 지정하고, value값을 1로 설정한다.
key값이 있다면, 기존의 value값에서 1을 더한다.
이후 몇 개의 숫자가 겹치는지 궁금한 숫자를 입력받는다.
만약 중복된 숫자(이미 존재하는 key) 일 경우, 지정된 key의 value(중복 횟수)를 sb에 추가한다.
만약 key가 없다면(중복된 숫자 없음) 0을 추가한다.
개선점이나 오류가 있다면 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준]7568번 덩치(java) (1) | 2022.07.12 |
---|---|
[백준]2981번 검문(java) (0) | 2022.07.11 |
[백준]10815번 숫자 카드(java) (0) | 2022.07.08 |
[백준]18870번 좌표 압축(java) (0) | 2022.07.08 |
[백준]1181번 단어정렬(java) (0) | 2022.07.06 |