Algorithm/Programmers
[Java] 완전탐색 - 모의고사(Lv1)
th42500
2022. 8. 4. 23:37
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
💡 포인트
1️⃣ 정답 배열의 순서와 각각 길이가 다른 수포자의 정답 배열의 순서를 일치시킬 수 있어야 함
2️⃣ 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬
❓ 풀이과정
1️⃣ 각 수포자가 찍는 방식을 배열을 생성하여 담기
2️⃣ 정답 배열을 순회하며 각 번호의 수포자의 번호와 일치한다면 success[수포자 번호-1]+1
👉 현재 정답 배열의 인덱스%각 수포자 정답의 길이 = 수포자가 입력한 정답 인덱스
3️⃣ success 배열을 순회하며 최댓값 찾기
4️⃣ success 배열을 한번 더 순회하며 최댓값이 같은 수가 있는지 확인하고 있다면 리스트에 인덱스 (수포자의 번호-1) 추가
5️⃣ 수포자 번호 정답 배열에 입력
👉 인덱스는 0부터 시작하므로 수포자의 번호 입력 시 +1 해주기
❗ 결과
👉 테스트 통과
✔ 소스코드
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) {
int[][] sizes = { { 60, 50 }, { 30, 70 }, { 60, 30 }, { 80, 40 } };
// int[][] sizes = {{10, 7}, {12, 3}, {8, 15}, {14, 7}, {5, 15}};
// int[][] sizes = {{14, 4}, {19, 6}, {6, 16}, {18, 7}, {7, 11}};
System.out.println(solution(sizes));
}
private public int[] solution(int[] answers) {
int[] one = {1, 2, 3, 4, 5};
int[] two = {2, 1, 2, 3, 2, 4, 2, 5};
int[] three = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
ArrayList<Integer> list = new ArrayList<>();
int[] success = new int[3];
for (int i = 0; i < answers.length; i++) {
if(answers[i] == one[i%one.length]) {
success[0]++;
}
if(answers[i] == two[i%two.length]) {
success[1]++;
}
if(answers[i] == three[i%three.length]) {
success[2]++;
}
}
int max = 0;
for (int i = 0; i < success.length; i++) {
if(max < success[i]) max = success[i];
}
for (int i = 0; i < success.length; i++) {
if(success[i] == max) {
list.add(i);
}
}
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++) {
answer[i] = list.get(i)+1;
}
// System.out.println(Arrays.toString(answer));
return answer;
}
}