문제(출처: https://www.acmicpc.net/problem/5104)
< NoMoPhobia >
문제 풀이
HashMap을 사용하여 각 학생별 점수를 계산한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;
public class _5104_ { // NoMoPhobia
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
HashMap<String, Integer> table = new HashMap<>();
table.put("TT", 75);
table.put("TX", 50);
table.put("PR", 80);
table.put("RT", 30);
table.put("AP", 25);
table.put("PX", 60);
HashMap<String, Integer> map = new HashMap<>();
int w, n;
while ((w = Integer.parseInt(st.nextToken())) != 0 && (n = Integer.parseInt(st.nextToken())) != 0) {
ArrayList<String> names = new ArrayList<>();
for (int i = 0; i < n; i++) {
st = new StringTokenizer(bf.readLine());
String name = st.nextToken();
String code = st.nextToken();
if (map.containsKey(name)) {
map.replace(name, map.get(name) + table.get(code));
} else {
names.add(name);
map.put(name, table.get(code));
}
}
bw.write("Week " + w + " ");
boolean flag = false;
for (int i = 0; i < names.size(); i++) {
if (map.get(names.get(i)) >= 100) {
if (flag) {
bw.write(",");
}
bw.write(names.get(i));
flag = true;
}
}
if (!flag) {
bw.write("No phones confiscated");
}
bw.write("\n");
st = new StringTokenizer(bf.readLine());
map.clear();
}
bw.flush();
}
}
변수)
table : 코드 별 점수
map : 학생 별 벌점
w, n : w주차, 벌점 개수
names : 입력된 순서
name, code : 학생별 벌점 코드
flag : 벌점 100 넘은 학생 존재 여부
table HashMap에 코드와 점수를 저장한다. w와 n이 0이 아닐 때까지 다음 과정을 반복한다.
1) n만큼 name과 code를 입력받는다.
2) map에 name을 key값으로 가지고 code에 해당하는 점수를 value에 더한다. 입력순으로 출력하기 위해 ArrayList에 name을 저장한다.
3) ArrayList에 저장한 이름순으로 map을 탐색하며 value가 100 이상이라면 이름을 출력한다.
4) 아무도 100 이상인 사람이 없다면 "No phones confiscated"를 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 32328_Bronze Count (0) | 2025.01.08 |
---|---|
[Baekjoon] 31307_Lines Per Hour (0) | 2025.01.07 |
[Baekjoon] 9979_Does This Make Me Look Fat? (0) | 2024.12.26 |
[Baekjoon] 27035_Bovine Ballroom Dancing (0) | 2024.12.24 |
[Baekjoon] 13281_Look for the Winner! (0) | 2024.12.23 |