-
프로그래머스 #모의고사프로그래머스 2022. 5. 3. 22:41
https://programmers.co.kr/learn/courses/30/lessons/42840?language=java
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
해결 방안
1. 주어진 조건에 맞는 배열 3개 생성
arr1 = {1, 2, 3, 4, 5}
arr2 = {2, 1, 2, 3, 2, 4, 2, 5}
arr3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}2. while ( x < answers.length) -> 전체문항수의 길이만큼 반복문 실행
--> count 변수를 하나 더 추가(y) 해서 1. 의 배열의 길이만큼 while문 반복 후 다시 0으로 y를 초기화하도록
(arr1[0] → arr1[1] → ... arr1[4] → arr1[0] → arr1[1] → ...)
3. 2.의 while문은 1. 의 배열의 갯수 (3개) 만큼 반복 실행되야 하므로 메소드로 제작
-> answers와 1. 배열의 값이 서로 일치할때마다 count++ => count 값을 return 한다
4. 3.의 메소드에서 return 된 count를 서로 비교 후 int[] answer에 넣어 return 한다
-> 각종 방법을 고안해봤으나 원시적으로 비교하는 방법 말고는 생각나질 않았다...
-> int[]의 길이를 설정하기 위해 arrayList를 이용했다.
import java.util.*; class Solution { int index1, index2, count = 0; public int[] solution(int[] answers) { ArrayList<Integer> array = new ArrayList<>(); int aCnt, bCnt, cCnt = 0; int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = {2, 1, 2, 3, 2, 4, 2, 5}; int[] arr3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; aCnt = checkAnswer(answers, arr1); bCnt = checkAnswer(answers, arr2); cCnt = checkAnswer(answers, arr3); if(aCnt==bCnt && aCnt==cCnt) { array.add(1); array.add(2); array.add(3); } if(aCnt>bCnt && aCnt==cCnt) {array.add(1); array.add(3);} if(aCnt>cCnt && aCnt==bCnt) {array.add(1); array.add(2);} if(bCnt>aCnt && bCnt==cCnt) {array.add(2); array.add(3);} if(aCnt>bCnt && aCnt>cCnt) array.add(1); if(bCnt>aCnt && bCnt>cCnt) array.add(2); if(cCnt>aCnt && cCnt>bCnt) array.add(3); int[] answer = new int[array.size()]; for(int i=0; i<array.size(); i++) { answer[i] = array.get(i); } return answer; } public int checkAnswer(int[] answers, int[] arr) { index1=0; index2=0; count = 0; while(index1<answers.length) { if(answers[index1] == arr[index2]) count++; index1++; if(index2 == arr.length-1) index2=0; else index2++; } return count; } }
생각해보기
index1, index2로 나누어서 장황하게 메소드로 만들지 않고
for(int i=0; i<answers.length; i++){ if(answers[i] == a[(i+1)%5]) aCnt++; if(answers[i] == b[(i+1)%8]) bCnt++; if(answers[i] == c[(i+1)%10]) cCnt++; }
이렇게 작성하는 방법도 있었다.
new int[] {1,2,3} 이렇게 배열 생성하는 방법을 몰라서 괜히 arrayList를 만들었당...
'프로그래머스' 카테고리의 다른 글
프로그래머스 #2016년 (0) 2022.05.06 프로그래머스 #내적 (0) 2022.05.06 프로그래머스#3 재활 치료 (0) 2022.05.01 프로그래머스 #2 재활 치료 (0) 2022.04.29 프로그래머스 #1 재활 치료 (0) 2022.04.28