본문 바로가기

ALGORITHM

[프로그래머스 Java] 모의고사

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

⏱소요 시간 - 1시간 40분

 

🔑해결 방법

 

하... 이 문제는 정말 힘들었다. 

수식을 찾는 것 까지는 괜찮았는데 배열을 통해서 가장 많이 맞힌 사람을 저장하려고 하니, 동일 점수가 있을수록 뭔가 꼬였다.

왜냐? 배열의 길이는 한 번 정해지면 유동적으로 바꿀 수 없기 때문이다......ㅠ

그러므로 앞으로 유동적인 무언가를 저장할 때는 리스트를 사용하자. 절대 잊지말자!!!

 

또 한 가지, a, b, c 배열이 answers 배열의 길이보다 작은 경우를 생각해줘야하는데 (a, b, c를 몇 바퀴씩 돌아야할 경우)

아래의 코드를 예로, a의 길이는 5, answers 길이는 10이라고 가정하자.

 

a[0] == answers[0]

a[1] == answers[1]

...

a[5] == answers[5] // a에는 인덱스 5가 없잖아! 그럼 0부터 다시 시작할 수 있도록 수식을 생각해보자.

a[5%a.length] = a[5%5] = 0 = a[0]는

결국 a[0] == answers[5] 가 되므로 반복~

 

a[6] == answers[6] ---> a[6%a.length] --> a[6%5] = 1

a[7] == answers[7] ---> a[7%a.length] --> a[7%5] = 2

 

이런식이 된다!

 

 

🔎소스 코드

 

package step1;

import java.util.*;

// 모의고사
public class Ex04 {

	public static void main(String[] args) {
		
		System.out.println(solution(new int[]{ 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 }));
		System.out.println(solution(new int[]{ 1, 3, 2, 4, 2 }));
		System.out.println(solution(new int[]{ 5, 4, 3, 2, 1 }));
		
	}
	
	public static int[] solution(int[] answers) {
		
		int[] answer = {}; // 가장 많이 맞힌 사람이 저장될 배열
		
		int[] cnt = new int[3]; // cnt[0]: a가 맞힌 개수, cnt[1]: b가 맞힌 개수, cnt[2]: c가 맞힌 개수
		
		int[] a = { 1, 2, 3, 4, 5 };
		int[] b = { 2, 1, 2, 3, 2, 4, 2, 5 };
		int[] c = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
		
		for(int i = 0; i < answers.length; i++) {
			
			if(a[i%5] == answers[i]) { 
				cnt[0]++;
			}
			
			if(b[i%8] == answers[i]) { 
				cnt[1]++; 
			}
			
			if(c[i%10] == answers[i]) { 
				cnt[2]++; 
			}

		}
		
		// cnt 배열에서 가장 큰 수 가져오기 (동일한 경우가 있을 수 있으니 리스트에 담아서 내보내자)
		List<Integer> list = new ArrayList<Integer>();
		
		int max = Math.max(cnt[0], Math.max(cnt[1], cnt[2]));
		
		if(max == cnt[0]) {
			list.add(1);
		}
		
		if(max == cnt[1]) {
			list.add(2);
		}
		
		if(max == cnt[2]) {
			list.add(3);
		}
		
		answer = list.stream().mapToInt(i->i).toArray();
		
		System.out.println(Arrays.toString(answer));
		
		return answer;
		
	}

}