본문 바로가기
PS/BOJ

[자바] 백준 11101 - 꿍의 여친 만들기 (boj java)

by Nahwasa 2022. 6. 30.

문제 : boj11101

 

  문자열 파싱문제이다. 로직을 다음과 같이 나눠보자. 설명은 이하의 예제 입력 1의 테스트케이스 2를 기준으로 하겠다.

1
ab:13,b:17,cab:21
ab&b|b&cab

 

1. 각 테스트케이스의 첫줄을 받아 문자열을 key, 시간을 value로 하는 Map 형태로 만든다.

-> ':'와 ','을 기준으로 StringTokenizer로 문자열을 나누게 되면 ab, 13, b, 17, cab, 21이 순서대로 들어가 있게될 것이다.

따라서 순서대로 {ab:13, b:17, cab:21}의 Map 형태로 만들어줄 수 있다. 이후 맵에서 쉽게 "ab"의 시간을 알 수 있다.

 

2. 각 테스트케이스의 둘째줄을 받아 '|' 을 기준으로 나눈다.

-> 'ab&b'와 'b&cab'로 나뉠 것이다.

 

3. '2'에서 토큰이 있는만큼 뽑아내서 다시 '&'을 기준으로 나눈다.

3.1 우선 'ab&b'에 대해 'ab'와 'b'가 나올 것이다. 그럼 그 중 가장 큰 값이 'ab&b'의 시간이 된다. 17일 것이다.

3.2 다음은 'b&cab'이다. 'b'와 'cab'로 나뉠 것이고, 마찬가지로 21이 된다.

 

4. '2'에서 나뉜 각각의 토큰에 대해 '3'에서 구한 각 토큰의 최대시간 중 최소시간을 찾는다.

-> 'ab&b'가 17, 'b&cab'가 21 이였으므로 이 중 작은 값은 17이고 이게 답이 된다. 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    private int getAnswer(String a, String b) {
        StringTokenizer st = new StringTokenizer(a, ":, ");
        HashMap<String, Integer> hm = new HashMap<>();
        while (st.hasMoreTokens()) {
            hm.put(st.nextToken(), Integer.parseInt(st.nextToken()));
        }
        st = new StringTokenizer(b, "| ");
        int min = Integer.MAX_VALUE;
        while (st.hasMoreTokens()) {
            StringTokenizer tmp = new StringTokenizer(st.nextToken(), "& ");
            int max = -1;
            while (tmp.hasMoreTokens()) {
                max = Math.max(max, hm.get(tmp.nextToken()));
            }
            min = Math.min(max, min);
        }
        return min;
    }
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while (tc-->0) sb.append(getAnswer(br.readLine(), br.readLine())).append('\n');
        System.out.print(sb);
    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글