티스토리 뷰

728x90
반응형

문제

 

총 N개의 문자열로 이루어진 집합 S가 주어진다.

각 문자열은 입력 순서대로 1부터 시작하는 번호를 부여받는다.

입력으로 주어지는 문자와 번호에 대해 대응하는 값을 출력하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 문자열의 개수 N과 문제의 개수 M (1 ≤ N, M ≤ 100,000)이 주어진다. 
다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
다음 M개의 줄에는 검사해야 하는 문자열과 번호들이 주어진다.
입력으로 주어지는 문자열은 알파벳 대문자와 소문자로 이루어져 있으며, 길이는 최소 2, 최대 20이다.

또한 입력으로 주어지는 숫자는 1과 N 사이의 숫자이다.

집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

 

출력

 

첫째 줄부터 차례대로 M개의 주에 문제에 대한 답을 출력한다.

 

풀이

 

이번엔 해시맵을 연습하는 문제이다.

 

순서대로 입력받은 후 키값으로 밸류값을 찾거나, 그 반대로 값을 찾는 문제라고 파악했다.

 

해서 밸류값으로 키 값을 찾기 위해 이런저런 방법을 사용해 보았으나 자꾸만 시간초과가 나와서,

 

다른 방법을 찾아볼까 하다가 무식하게 해결하기로 했다.

 

기존의 키-밸류 값을 가지고 있는 map에 값을 넣을 때 그 순서를 뒤집어 밸류-키 값을 가지는 reverseMap을 함께 만들었다.

 

이후 주어진 값이 map의 키값이면 그 밸류값을, 없으면 reverseMap에서 검색해서 출력했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Prob1620_2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        Map<String, String> map = new HashMap<>();
        Map<String, String> reverseMap = new HashMap<>();

        for (int i = 0; i < n; i++) {
            String str = br.readLine();
            map.put(String.valueOf(i + 1), str);
            reverseMap.put(str, String.valueOf(i + 1));
        }

        for (int i = 0; i < m; i++) {
            String tmp = br.readLine();
            if (map.containsKey(tmp)) sb.append(map.get(tmp)).append('\n');
            else sb.append(reverseMap.get(tmp)).append('\n');
        }
        System.out.println(sb);
    }
}
반응형

'Algorithm > [Java+Python+JavaScript]BackJoon' 카테고리의 다른 글

[Python]3003번, 리스트 + for문  (1) 2023.01.25
[Python]10869번+, 사칙연산  (1) 2023.01.25
[Python]2557번, Hello World  (1) 2023.01.25
[BackJoon]14425번  (1) 2023.01.24
[BackJoon]10815번  (0) 2023.01.19
[BackJoon]2798번  (0) 2023.01.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함