완전탐색(brute-force) 방법으로 접근한 문제입니다. 앞으로 개념적으로만 이해하였던 알고리즘 풀이방법 (DFS/BFS, 동적 프로그래밍, Greedy 기법 등)을 공부하면서 구현해 나갈 것이지만 컴퓨터의 아주 빠른 처리속도를 이용한 모든 경우의 수를 세어보고 정답이 되는 부분만 골라내는 기법인 완전탐색을 사용하여 쉽고 간단하게 문제를 풀이할 수 있습니다
하지만 완전탐색의 모든 경우의 수를 계산하는 특성 상, 알고리즘의 구현 이전에 문제에서 제시한 시간복잡도 범주 이내에 들어오는 것을 확인(보통 1초 = 1억번) 한 뒤에 브루트 포스 를 적용해야할 것입니다.
세 명의 수포자가 시험을 진행하는 모의고사 문제설명과 답안 코드, 그리고 다른 사람들의 좋은 답안예시를 공유하도록 하였습니다.
● 답안 코드
public class maxCorrect {
public int[] solution(int[] answers) {
int[] answer = {};
int stu1, stu2, stu3;
stu1 = 0;
stu2 = 0;
stu3 = 0;
// 인덱스 다시돌기 -> % 10, %8
int[] supo1 = {1,2,3,4,5,1,2,3,4,5};
int[] supo2 = {2,1,2,3,2,4,2,5};
int[] supo3 = {3,3,1,1,2,2,4,4,5,5};
// 정답의 빈도 수 구하는 연산(문제풀이 할 때 answers 를 answer으로 잘못 표기. 동작하는코드 디버깅하고 있었음..)
for(int i = 0; i < answers.length; i++) {
int indexOfTen = i % 10;
int indexOfEight = i % 8;
if (supo1[indexOfTen] == answers[i]) stu1++;
if (supo2[indexOfEight] == answers[i]) stu2++;
if (supo3[indexOfTen] == answers[i]) stu3++;
}
// 1번 수포자가 가장 많이 맞춘 경우
if ((stu1 > stu2) && (stu1 > stu3)) {
answer = new int[1];
answer[0] = 1;
return answer;
}
// 2번 수포자가 가장 많이 맞춘 경우
else if((stu2 > stu1) && (stu2 > stu3)) {
answer = new int[1];
answer[0] = 2;
return answer;
}
// 3번 수포자가 가장 많이 맞춘 경우
else if((stu3 > stu1) && (stu3 > stu2)) {
answer = new int[1];
answer[0] = 3;
return answer;
}
// 1,2번 수포자가 가장 많이 맞춘 경우
else if((stu1 == stu2) && (stu1 > stu3)) {
answer = new int[2];
answer[0] = 1;
answer[1] = 2;
return answer;
}
// 1,3번 수포자가 가장 많이 맞춘 경우
else if((stu1 == stu3) && (stu1 > stu2)) {
answer = new int[2];
answer[0] = 1;
answer[1] = 3;
return answer;
}
// 2,3번 수포자가 가장 많이 맞춘 경우
else if ((stu2 == stu3) && (stu2 > stu1)) {
answer = new int[2];
answer[0] = 2;
answer[1] = 3;
return answer;
}
// 모든 수포자가 가장 많이 맞춘 경우
else {
answer = new int[3];
answer[0] = 1;
answer[1] = 2;
answer[2] = 3;
return answer;
}
}
}
문제를 풀이하는 중간에 if-else if-else 조건이 너무 길게 이어지는 바람에 다른 좋은방법은 없을까? 하다가 딱히 떠오르는게 없어
일단은 제 나름대로의 논리대로 문제를 풀이하고, 정답판정을 받은 뒤에 다른사람들의 풀이를 확인해보았습니다.
(정말 직관적이고, 알고리즘적으로도 효율적이게 코드를 짜내신 분들이 많더라구요.. 아오 저는 왜 이모냥)
다른분들이 풀이하셨던 것 보면서 아쉬운점과 이것저것을 비교해보기에 좋았습니다.
'모의고사' 문제 다른답안 확인하러가기 : https://programmers.co.kr/learn/courses/30/lessons/42840/solution_groups?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 프로그램의 시간복잡도 :
'Algorizym > Java' 카테고리의 다른 글
[Algorizym-Java] K번째 수( Programmers coding test) {My First resolve!} (0) | 2021.07.01 |
---|