[알고리즘과 자료구조] JAVA - 모의고사 - 완전탐색

가이드문구



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하는 값을 오름차순 정렬해주세요.


문제풀이

- 해결해야 할 문제... for문을 4번이나 돌려서 결과를 도출해 냄

  1. import java.util.*;
  2. class Solution {
  3. public int[] solution(int[] answers) {
  4. int[] answer = {};
  5. int[] aArr = {1, 2, 3, 4, 5}; // 1번 수포자 답안
  6. int[] bArr = {2, 1, 2, 3, 2, 4, 2, 5}; // 2번 수포자 답안
  7. int[] cArr = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; // 3번 수포자 답안
  8. // 수포자가 맞힌 점수의 갯수를 넣기위한 배열
  9. int[] intArr = new int[3];
  10. for( int i = 0; i < answers.length; i++ ) {
  11. if( answers[i] == aArr[i % aArr.length] ){ // 수포자 답안은 5개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  12. intArr[0]++;
  13. }
  14. if( answers[i] == bArr[i % bArr.length] ){ // 수포자 답안은 8개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  15. intArr[1]++;
  16. }
  17. if( answers[i] == cArr[i % cArr.length] ){ // 수포자 답안은 10개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  18. intArr[2]++;
  19. }
  20. }
  21. // 가장 큰 점수를 가진 수포자를 구하는 for~
  22. int winner = intArr[0];
  23. for(int j = 1; j < intArr.length; j++ ) {
  24. if( winner < intArr[j]) {
  25. winner = intArr[j];
  26. }
  27. }
  28. ArrayList<Integer> al = new ArrayList<Integer>();
  29. // 가장 큰 수를 구해서 al 리스트에 담는다.
  30. // Math.max () 함수를 사용해도 됨
  31. for ( int l = 0; l < intArr.length; l++ ){
  32. if ( winner == intArr[l]) {
  33. al.add(l);
  34. }
  35. }
  36. answer = new int[al.size()];
  37. for(int m = 0; m < al.size(); m++ ){
  38. answer[m] = al.get(m) + 1;
  39. }
  40. return answer;
  41. }
  42. }


다시 풀어본 풀이2

  1. import java.util.*;
  2. class Solution {
  3. public int[] solution(int[] answers) {
  4. int[] aArr = {1, 2, 3, 4, 5}; // 1번 수포자 답안
  5. int[] bArr = {2, 1, 2, 3, 2, 4, 2, 5}; // 2번 수포자 답안
  6. int[] cArr = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; // 3번 수포자 답안
  7. int a = 0;
  8. int b = 0;
  9. int c = 0;
  10. for( int i = 0; i < answers.length; i++ ) {
  11. if( answers[i] == aArr[i % 5] ){ // 수포자 답안은 5개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  12. a++;
  13. }
  14. if( answers[i] == bArr[i % 8] ){ // 수포자 답안은 8개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  15. b++;
  16. }
  17. if( answers[i] == cArr[i % 10] ){ // 수포자 답안은 10개이고 answers의 갯수가 더 증가할 수 있기 때문에 나머지 값을 구함
  18. c++;
  19. }
  20. }
  21. // 가장 큰 점수를 가진 수포자를 구하고
  22. int winner = Math.max( Math.max (a, b), c );
  23. ArrayList<Integer> al = new ArrayList<Integer>();
  24. if( winner == a) al.add(1);
  25. if( winner == b) al.add(2);
  26. if( winner == c) al.add(3);
  27. int[] answer = new int[al.size()];
  28. for(int m = 0; m < al.size(); m++ ){
  29. answer[m] = al.get(m);
  30. }
  31. return answer;
  32. }
  33. }


작성자 소개
초이 프로필
WrapUp 블로거

초이

반려견을 좋아하고, 차를 좋아하고, 여행을 좋아하고, 맛집을 찾아 즐기는 웹 개발자 입니다^^