문제 출처 - Baekjoon Online Judge
문제는 여기
[문제]
영정이는 병약하다. 본인도 병약한 것을 알고 있기 때문에 언제든 먹을 수 있는 약을 상비해서 들고 다닌다. 각 약들은 약의 이름과 필요한 증상이 적혀져 있으며 하나의 약은 하나의 증상만을 해결 할 수 있다. 각각의 약은 모두 다른 이름을 가지고 있으며 서로 다른 증상을 해결함이 보장된다. 영정이가 아픈 증상을 호소 할 때, 어떤 약들을 먹어야 하는지 출력 해 주자!
[입력]
프로그램의 입력은 표준 입력으로 받는다. 입력의 첫 줄에는 약의 종류의 개수 N이 입력된다. (1 ≤ N ≤ 100) 그 다음 N개의 줄에는 각각 약의 효능과 약의 이름이 숫자로 주어진다. (0 ≤ Me, Mn ≤ 100) 각 약의 이름과 효능은 다른 어떤 약의 이름, 효능과 중복되지 않음을 보장한다. 다음 줄에는 영정이가 겪는 증상의 개수 R이 입력된다. (1 ≤ R ≤ 100) 다음 R 줄에는 증상의 개수 Li 와 증상들 (S1, S2, … SL)이 주어진다 (1 ≤ Li ≤ N)
[출력]
프로그램의 출력은 표준 출력으로 한다. R 개의 증상에 따라 먹어야 하는 약을 순서대로 출력한다. 각각은 개행으로 구분한다. 증상을 하나 이상 해결할 수 없을 경우 ‘YOU DIED’ 를 출력한다.
[풀이]
1. 중복이 없기때문에 HashMap에 키를 효능, 번호를 약 번호로 주고 저장한다.
2. 주어진 증상들을 체크하면 효능과 매칭해보고 약 번호를 출력한다.
[접근]
1. HashMap에 값을 담아두고 contains를 사용해서 있다면 출력해준다.
2. 효능이 없는 경우 YOU DIED를 출력해줘야 하니까 StringBuilder에 담았다가 한번에 출력을 해준다.
[코드]
package BOJ_silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main_S4_14670 {
static int n; // 약의 종류의 개수
static int r; // 증상의 개수
static HashMap<Integer, Integer> map;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
map = new HashMap<>();
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
// 효능
int stat = Integer.parseInt(st.nextToken());
// 이름
int name = Integer.parseInt(st.nextToken());
map.put(stat, name); // 맵에 등록
}
r = Integer.parseInt(br.readLine());
for (int i = 0; i < r; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int count = Integer.parseInt(st.nextToken());
for (int j = 0; j < count; j++) {
int dis = Integer.parseInt(st.nextToken());
if (map.containsKey(dis)) { // 증상에 맞는 약이 있다면
sb.append(map.get(dis)).append(" "); // 약 번호를 등록
}
else { // 없다면
sb.setLength(0); // StringBuilder를 비우고
sb.append("YOU DIED"); // 넣어준다.
break; //탈출
}
}
System.out.println(sb); // 저장된 것을 비워준다.
sb.setLength(0); // 스트링 빌더를 놔두면 중복 출력이 되기 때문에 여기서 비워준다.
}
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S4 10825번 국영수 (JAVA) (0) | 2021.11.03 |
---|---|
[백준] G5 14891번 톱니바퀴 (JAVA) (0) | 2021.11.01 |
[백준] G4 1806번 부분합 (JAVA) (0) | 2021.10.31 |
[백준] G4 5052번 전화번호 목록 (JAVA) (0) | 2021.10.29 |
[백준] S2 11725번 트리의 부모 찾기 (JAVA) (0) | 2021.10.29 |