-
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
문제
해당 문제는 전체 정답 배열이 주어졌을 때 1, 2, 3번 수포자 중 정답을 가장 많이 맞힌 사람을 구하는 문제다.
각각 수포자들은 조건과 같은 방식으로 정답을 찍는다.
조건
- 1번 수포자 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ....
- 2번 수포자 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3 ....
- 3번 수포자 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1 ....
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return 하는 값을 오름차순 정렬해주세요.
풀이
해당 문제는 완탐 문제라 그냥 전체 정답 배열을 다 탐색하면서 각각 조건을 통해 정답이 맞는지 카운트하는 방식으로 해결했고, 이후 최댓값을 구하고, 최댓값과 같은 사람 수를 구한 뒤 리턴 배열에 해당 수포자를 넣는 방식으로 해결했다.
코드
import java.util.Arrays; class Solution { public int[] solution(int[] answers) { // 반복된 숫자를 입력해줌 int[] arr_a = new int[] {1,2,3,4,5}; int[] arr_b = new int[] {2,1,2,3,2,4,2,5}; int[] arr_c = new int[] {3,3,1,1,2,2,4,4,5,5}; int a = 0, b =0 , c=0, cnt_a=0, cnt_b=0, cnt_c = 0; for (int i = 0; i < answers.length; i++) { // 전체 배열만큼 체크 a = a == 5 ? 0 : a; // 각각 배열 범위 벗어나면 다시 인덱스를 0으로 바꿈 b = b == 8 ? 0 : b; c = c == 10 ? 0 : c; if(answers[i] == arr_a[a++]) //답이 같을때마다 각각 카운트를 증가시킴 cnt_a++; if(answers[i] == arr_b[b++]) cnt_b++; if(answers[i] == arr_c[c++]) cnt_c++; } int max = Math.max(Math.max(cnt_a, cnt_b), cnt_c); // 3명중 젤 많이 맞춘값 갱신 int cnt = 0; // 여기는 이제 max값과 같은 사람수 저장 cnt += cnt_a == max ? 1 : 0; cnt += cnt_b == max ? 1 : 0; cnt += cnt_c == max ? 1 : 0; int[] answer = new int[cnt]; int index = 0; if(max == cnt_a) answer[index++] = 1; if(max == cnt_b) answer[index++] = 2; if(max == cnt_c) answer[index++] = 3; return answer; } }
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
728x90'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 네트워크 JAVA (0) 2022.04.25 프로그래머스 거리두기 확인하기 JAVA (0) 2022.03.09 프로그래머스 가장 큰 수 JAVA (0) 2022.03.08 프로그래머스 K번째수 JAVA (0) 2022.03.08 프로그래머스 기능개발 JAVA (0) 2022.03.02 댓글