반응형
문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입출력 예
answersreturn
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.*;
public class ExhaustiveSearch {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExhaustiveSearch es = new ExhaustiveSearch();
int[] answers = {1,3,2,4,2};
// System.out.println("ddd");
for(int tmp : es.solution(answers)) {
System.out.println(tmp);
}
}
public int[] solution(int[] answers) {
String n1 = "12345";
String n2 = "21232425";
String n3 = "3311224455";
int length = answers.length;
String[] studentPattern = new String[3];
String[] studentAnswers = new String[3];
studentPattern[0] = "12345";
studentPattern[1] = "21232425";
studentPattern[2] = "3311224455";
for(int i=0; i<3; i++) {
int quot = length / studentPattern[i].length();
int mod = length % studentPattern[i].length();
studentAnswers[i] ="";
for(int j=0; j<quot; j++) {
studentAnswers[i]+= studentPattern[i];
}
studentAnswers[i] += studentPattern[i].substring(0, mod);
}
//n1의 답지 생성
// int n1Quot = length / n1.length();
// int n1Mod = length % n1.length();
// String n1Answers = "";
// for(int i=0; i<n1Quot; i++){
// n1Answers += n1;
// }
// n1Answers += n1.substring(0,n1Mod);
// //n2의 답지 생성
// int n2Quot = length / n2.length();
// int n2Mod = length % n2.length();
// String n2Answers = "";
// for(int i=0; i<n2Quot; i++){
// n2Answers += n2;
// }
// n2Answers += n2.substring(0,n2Mod);
// //n3의 답지 생성
// int n3Quot = length / n3.length();
// int n3Mod = length % n3.length();
// String n3Answers = "";
// for(int i=0; i<n3Quot; i++){
// n3Answers += n3;
// }
// n3Answers += n3.substring(0,n3Mod);
//답안지 생성까지 디버깅 확인완료!
//실제 답안지와 비교 체크!
int[] count = new int[3];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0; i<length; i++){
if(answers[i] == (int)studentAnswers[0].toCharArray()[i]-48){
count[0]++;
map.put(1, count[0]);
}
if(answers[i] == (int)studentAnswers[1].toCharArray()[i]-48){
count[1]++;
map.put(2, count[1]);
}
if(answers[i] == (int)studentAnswers[2].toCharArray()[i]-48){
count[2]++;
map.put(3, count[2]);
}
}
List<Entry<Integer,Integer>> list = new ArrayList<Entry<Integer,Integer>>(map.entrySet());
// 비교함수 Comparator를 사용하여 내림 차순으로 정렬
Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
// compare로 값을 비교
public int compare(Entry<Integer, Integer> obj1, Entry<Integer, Integer> obj2)
{
// 내림 차순으로 정렬
return obj2.getValue().compareTo(obj1.getValue());
}
});
for(int i=0; i<list.size(); i++) {
if(list.get(0).getValue() != list.get(i).getValue()) {
list.remove(i);
}
}
int[] intArr = new int[list.size()];
for(int i=0; i< list.size(); i++) {
intArr[i] = list.get(i).getKey();
}
return intArr;
}
}
왜일까... 나름 쉽다고 생각하고 도전했는데, 많이 못보긴 했지만 일주일이 지나도록 풀지 못하고 있다...
정말 힘을 빼고 풀어야 할까?... 나는 이직할수있을까?...
반응형
'Under Construction' 카테고리의 다른 글
Pagination(Pageable)? (0) | 2022.08.24 |
---|---|
정렬알고리즘 - Lv2(가장 큰수)-1(ing) (0) | 2021.07.22 |
탐욕알고리즘 - Lv2(조이스틱)-1(ing) (0) | 2021.07.13 |