[JAVA] 프로그래머스 코딩테스트 모의고사 풀이

김훈·2022년 1월 7일
0

[JAVA]

목록 보기
1/5

문제

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. 찍는 패턴과 정답지를 비교해 각 학생별 정답의 수를 찾는다.
  2. 각 학생별 정답의 수 들중 가장 많은 정답의 수를 찾는다.
  3. 각 학생별 정답의 수 들과 가장 많은 정답의 수를 비교하며 몇번째 값이 제일 큰지 찾는다.
  4. 찾은 제일 큰 순서의 값을 출력한다.

코딩 하기전 이렇게 정리를 하고 문제를 풀었다.

  • 첫 문제 풀이
  1. count[0] > count[1] 를 비교하고
  2. 참 일 경우 count[0] 과 [2] 를 비교
  3. 거짓을 경우 [1] 과 [2] 를 비교하여 가장 큰 값을 획득
  4. 가장 큰 값을 획득

완전 단순하게 가장 큰 값을 찾는 방식으로 했다

  • 최종 문제 풀이
package ***;

import java.util.ArrayList;
import java.util.Arrays;

public class *** {
	public static void main(String[] args) {

		ArrayList<Integer> list = new ArrayList<Integer>();

		int[] answer = { 1, 2, 3, 4, 5 };
		int[] su1 = { 1, 2, 3, 4, 5 };
		int[] su2 = { 1, 2, 3, 4, 5, 1, 2, 3 };
		int[] su3 = { 1, 2, 3, 1, 2, 1, 2, 3, 4, 5 };

		int[] count = { 0, 0, 0 };

		// answer 와 Su를 비교하여 일치하는 숫자 만큼 count[i] 증가
		for (int i = 0; i < answer.length; i++) {
			if (Su1[i % 5] == answer[i]) {
				count[0]++;
			}

			if (Su2[i % 8] == answer[i]) {
				count[1]++;
			}

			if (Su3[i % 10] == answer[i]) {
				count[2]++;
			}

		}

		// count[] 의 길이 만큼 arr을 생성후 내용 복사
		int[] arr = new int[count.length];
		for (int i = 0; i < count.length; i++) {
			arr[i] = count[i];
		}

		// 복제한 arr[]을 많이 맞힌 순으로 오름차순 정렬
		Arrays.sort(arr);

		// 오름차순 정렬시 arr[2]에 제일 큰 값이 위치하게 된다.
		// 이후 count[i] 를 차례로  arr[2] 와 비교하여 제일 큰 i번째 값을 찾아 낸뒤
		// list에 i 값 저장.
		for (int i = 0; i < arr.length; i++) {
			if (count[i] == arr[2]) {
				list.add(i + 1);
			}
		}
		System.out.println(list);
	}
}

최종 풀이다. count 를 찾는것 까진 동일하고

  1. count와 똑같은 배열 arr를 선언하고 데이터를 복사한다.
  2. arr을 오름차순 정렬한다.
  3. 마지막에 있는 값이 가장 큰 값이다.
  4. count[i]와 차례로 비교해 가장 큰 값의 순서를 찾고 list에 저장한다.

가장 큰 값을 찾아내는 부분에서 차이가 있다.

  • 다른 풀이
    1. int max = Math.max(Math.max(a, b), c);
      Math.max를 두 번 사용해 제일 큰 값을 찾는다.
      -> 왜 이걸 생각을 못했을까...
    1. int[] count = { 0, 0, 0 }; --> int a = 0, b = 0 , c = 0;
      배열로 처리 할 경우 하나 하나 돌면서 처리해 느리다.
      그냥 하나 씩 선언해 저장한 다음 돌리는게 더 빠르다.
profile
작고 소중한 개발 노트

0개의 댓글