728x90
https://programmers.co.kr/learn/courses/30/lessons/42840?language=java
수포자 3명이 각자 문제를 찍는 방식이 다릅니다.
3명이 문제를 찍었을때 가장 많이 맞은 사람을 출력하는 문제인데 최고점자가 2명이상일때는 동시에 출력을 해주어야합니다.
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
// 코드가 길어질거같아서 메소드 만들어서 뻇습니다!
int[] tmp = {supo01(answers), supo02(answers), supo03(answers)};
List<Integer> list = new ArrayList<Integer>();
// 나중에 최고점인 사람을 기록하기 위해...
int max = 0;
// 최고점수가 몇점인지
for(int i = 0; i < tmp.length; i++){
if(tmp[i] > max){
max = tmp[i];
}
}
// 최고점수인 사람이 몇명인지 알기위해 + 누구인지 알기위해
for(int i = 0; i < tmp.length; i++){
if(tmp[i] == max){
list.add(i);
}
}
// list만큼 answer의 배열길이를 정해주고
int[] answer = new int [list.size()];
// list를 answer 배열로 옮겨옵니다.
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i) + 1;
}
return answer;
}
private int supo01(int[] answers){
int[] supoza = {1, 2, 3, 4, 5};
int count = 0;
for(int i = 0; i < answers.length; i++){
if(answers[i] == supoza[i % supoza.length]){
count++;
}
}
return count;
}
private int supo02(int[] answers){
int[] supoza = {2, 1, 2, 3, 2, 4, 2, 5};
int count = 0;
for(int i = 0; i < answers.length; i++){
if(answers[i] == supoza[i % supoza.length]){
count++;
}
}
return count;
}
private int supo03(int[] answers){
int[] supoza = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int count = 0;
for(int i = 0; i < answers.length; i++){
if(answers[i] == supoza[i % supoza.length]){
count++;
}
}
return count;
}
}
어후 복잡해라...
저는 참 코드를 깔끔하게 못짜는 재주가 있는거같아요 ㅠㅠ
리팩토링 연습해야지,,,
우선 수포자1 수포자2 수포자3이 각각 맞은문제수를 리턴하는 메소드를 따로따로 만들어 주었습니다.
max 변수를 선언하여 1, 2, 3중 최고 점수를 저장하고 있고 최고 점수를 가지고 있는 모든 사람들을 배열에 담으려고 했으나 배열의 길이를 미리 알수 없는 관계로 list 객체를 만들어서 list에다가 담았습니다!
그리고 list의 길이만금 answer 배열을 선언해주고 list를 answer 배열로 옮겨주면 끝!
참 쉽죠잉?
728x90
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers]멀쩡한 사각형_자바 (0) | 2021.08.01 |
---|---|
[Programmers] 다트게임 - 2018 카카오 블라인드_자바 (0) | 2021.07.31 |
[Programmers_Java] 크레인 인형뽑기 게임(2019 카카오 인턴십) (0) | 2021.07.28 |
[Programmers_Java] K번째 수 (0) | 2021.07.27 |
[Programmers_Java] 2016 (0) | 2021.07.26 |