programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
문제 설명 :
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers 에서 1번, 2번, 3번 중에 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담으시오.
문제 풀이 :
완전 탐색으로 먼저 1번, 2번, 3번 수포자들의 배열을 만들어줍니다. check 배열은 수포자들의 정답을 각각 세주기 위한 배열입니다.
이후 answers 배열을 처음부터 끝까지 반복해서 돌면서 각각의 수포자들과 정답이 같은 원소의 수를 세줍니다. 예를 들어 answer의 요소가 1번의 요소와 같으면 check 배열의 해당하는 원소에 더해줍니다.
반복문이 끝난 후 check 배열에서 가장 큰 숫자를 구해줍니다.
이때 가장 높은 점수를 받은 사람이 여럿이라는 조건을 해결해주기 위해 list를 선언합니다. 가장 큰 숫자가 들어있는 win 변수와 check배열의 요소를 비교하여 조건을 만족하면 list에 추가해줍니다.
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public static 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 };
int[] check = new int[3];
for (int i = 0; i < answers.length; i++) {
if(answers[i] == one[i%one.length]) check[0]++;
if(answers[i] == two[i%two.length]) check[1]++;
if(answers[i] == three[i%three.length]) check[2]++;
}
int win = Math.max(Math.max(check[0], check[1]),check[2]);
ArrayList<Integer> list = new ArrayList();
if(win == check[0]) list.add(1);
if(win == check[1]) list.add(2);
if(win == check[2]) list.add(3);
int[] answer = new int[list.size()];
for(int i = 0; i< answer.length; i++) {
answer[i] = list.get(i);
}
return answer;
}
}
'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
[백준] 11047 동전0 (0) | 2021.01.06 |
---|---|
[백준] 11399번 ATM (0) | 2021.01.05 |
[백준] 4949번 균형잡힌 세상 (0) | 2020.11.10 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT 캐시 (0) | 2020.11.09 |
[백준] 14889번 스타트와 링크 (0) | 2020.10.25 |