목차 💻
▸ 모의고사 완전 탐색
▸ 소수만들기
출처: 프로그래머스 코딩테스트 연습 > 완전탐색 > 모의고사
[오답코드]
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int[] solution(int[] answers) {
List<Integer> result = new ArrayList<>();
int correct1 = 0;
int correct2 = 0;
int correct3 = 0;
List<Integer> answerList1 = new ArrayList<>();
List<Integer> answerList2 = new ArrayList<>();
List<Integer> answerList3 = new ArrayList<>();
//수포자들의 정답 리스트
int[] answer1 = {1, 2, 3, 4, 5};
int[] answer2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] answer3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
//answers 배열 수정
List<Integer> answerList = new ArrayList<>();
for(int i = 0; i < answers.length; i++){
answerList.add(answers[i]);
}
answerList.addAll(answerList);
for (int i = 0; i < answer1.length; i++){
answerList1.add(answerList.get(i));
}
for (int i = 0; i < answer2.length; i++){
answerList2.add(answerList.get(i));
}
for (int i = 0; i < answer3.length; i++){
answerList3.add(answerList.get(i));
}
//1번 수포자
for(int i = 0; i < answerList1.size(); i++){
if(answerList1.get(i) == answer1[i]){
correct1 ++;
}
}
//2번 수포자
for(int i = 0; i < answerList2.size(); i++){
if(answerList2.get(i) == answer2[i]){
correct2 ++;
}
}
//3번 수포자
for(int i = 0; i < answerList3.size(); i++){
if(answerList3.get(i) == answer3[i]){
correct3 ++;
}
}
//맞힌 문제 수 비교
int[] correctnumber = {correct1, correct2, correct3};
int max = correctnumber[0];
for(int i = 1; i < correctnumber.length; i++){
if(max <= correctnumber[i]){
max = correctnumber[i];
result.add(i+1);
}
}
if(result.size()==0){
result.add(1);
}
if(max == correct2 && max == correct3){
result.add(1);
}
Collections.sort(result);
//리스트 -> 배열
int resultsize = result.size();
int[] answer = new int[resultsize];
for(int i = 0; i<resultsize; i++){
answer[i] = result.get(i);
}
return answer;
}
}
[수정 코드]
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int[] answers) {
//수포자들의 정답 배열과 실제 맞힌 수의 배열
int[] answer1 = {1, 2, 3, 4, 5};
int[] answer2 = {2, 1, 2, 3, 2, 4, 2, 5};
int[] answer3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int[] answer = {0, 0, 0};
//정답과 비교 ⭐️
for(int i = 0; i < answers.length; i++){
if(answers[i] == answer1[i%5]){
answer[0]++;
}
if(answers[i] == answer2[i%8]){
answer[1]++;
}
if(answers[i] == answer3[i%10]){
answer[2]++;
}
}
//최댓값 찾기
int max = answer[0];
for(int i =1; i < answer.length; i++){
if(max < answer[i]){
max = answer[i];
}
}
//최댓값과 동일한 수포자 리스트 생성
List<Integer> answerpeople = new ArrayList<>();
for(int i = 0; i < answer.length; i++){
if(max==answer[i]){
answerpeople.add(i+1);
}
}
//리스트 -> 배열
int [] result = new int[answerpeople.size()];
for(int i = 0; i < result.length; i++){
result[i] = answerpeople.get(i);
}
return result;
}
}
⭐️ 주의 ⭐️
패턴이 정해진 수의 배열에 접근하기 위해서는 나눗셈을 활용한 index를 통해서 접근한다.
출처: 프로그래머스 코딩테스트 연습 > Summer/Winter Coding(~2018) > 소수 만들기
import java.util.List;
import java.util.ArrayList;
class Solution {
public int solution(int[] nums) {
int count = 0;
List<Integer> answerList = new ArrayList<>();
List<Integer> sumList = new ArrayList<>();
// 3개의 숫자 조합별 합 구하기
for(int i = 0; i< nums.length-2; i++){
for(int j = i+1; j< nums.length-1; j++){
for(int k = j+1; k<nums.length; k++){
int sum = nums[i] + nums[j] + nums[k];
sumList.add(sum);
//sum이 소수인지 판별
boolean isPrime = true;
for(int h = 2; h < sum; h++){
if(sum%h == 0){
isPrime = false;
}
}
if(isPrime){
count++;
answerList.add(sum);
}
}
}
}
return count;
}
}