문제 내용은 입력으로 걸린 시간 / 문제 번호 / 정답-오답 여부를 받은 뒤 -1을 입력으로 받으면 최종 정답인 문제 갯수와 문제 푸는데 걸린 시간을 출력해야 하는데, 주의해야 할 점은 오답을 몇번 내다가 정답을 맞춘 경우에는 패널티 숫자를 추가해야 하고 공식은 다음과 같다 문제 맞히는데 걸린 시간 + (틀린 횟수 * 20)
마지막으로 문제 푸는데 걸린 시간은 결과적으로 문제가 맞았어야 계산하는 것이기 때문에, 끝까지 틀렸으면 걸린 시간에 포함을 하지 않아도 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, String[]> map = new HashMap<>();
int correctNum = 0;
int totalTime = 0;
while (true) {
String val = br.readLine();
if (val.equals("-1")) { // 결산
Set<String> keySet = map.keySet();
Iterator<String> iter = keySet.iterator();
while (iter.hasNext()) {
String key = iter.next();
String[] fin = map.get(key);
if (fin[1].equals("right")) {
correctNum++;
if (fin[2] != null) {
totalTime += Integer.parseInt(fin[0]) + (Integer.parseInt(fin[2]) * 20);
} else {
totalTime += Integer.parseInt(fin[0]);
}
}
}
break;
} else {
String[] arr = val.split(" ");
String[] score = new String[3];
score[0] = arr[0]; // 시간
score[1] = arr[2]; // 맞틀
int temp = 0;
if (arr[2].equals("wrong")) {
temp = 1;
}
String[] current = map.get(arr[1]);
if (current == null) {
score[2] = String.valueOf(temp);
} else {
score[2] = String.valueOf(Integer.parseInt(current[2]) + temp);
}
map.put(arr[1], score);
}
}
System.out.println(correctNum + " " + totalTime);
}
}
정말 고통 속에 문제를 풀었는데 Map으로 문제 정보를 담아 저장하고 동일한 문제가 들어오면 걸린 시간 / 정답 오답 여부 / 틀린 횟수를 업데이트 해 줘야 하는데
실제 개발 건이라면 클래스를 하나 더 만든 뒤 int time, boolean succeed, int falseNum 이런 식으로 변수를 선언해둔 뒤 Map<String, 클래스> 이런 식으로 진행을 했었겠지만, 클래스를 추가할 수가 없는 관계로 String 배열 밀어넣고 계속 형변환 해가면서 계산을 진행했는데
시간이나 합불 여부는 계산할게 없기 때문에 그냥 Put으로 밀어넣으면 되지만, 실패했을 경우에는 실패 횟수가 카운터가 되야하기 때문에 처음 틀릴 경우 null인 경우를 주의해서 틀릴 때마다 1씩 올려주면서 진행하면서 Map을 다 밀어넣고 -1이 입력으로 들어올 경우 결산해주고 정답 반환해주면 되는데
어차피 맞은 갯수와 맞은 문제의 걸린 시간만 계산하면 되고, 패널티가 있는 항목의 경우 패널티 공식인 문제 맞히는데 걸린 시간 + (틀린 횟수 * 20) 을 잊지 말고 계산해준 후 정답 갯수 / 패널티를 포함한 전체 소요 시간을 출력해주면 끝이다
Leave a Reply