문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 1835 - 카드 (boj java) (0) | 2022.06.30 |
---|---|
[자바] 백준 12873 - 기념품 (boj java) (2) | 2022.06.30 |
[자바] 백준 17826 - 나의 학점은? (boj java) (0) | 2022.06.29 |
[자바] 백준 23806 - 골뱅이 찍기 - ㅁ (boj java) (0) | 2022.06.29 |
[자바] 백준 23794 - 골뱅이 찍기 - 정사각형 (boj java) (0) | 2022.06.27 |
댓글