99클럽 코테 스터디 10일차 TIL + ArrayList

Boxx-Ham·2024년 5월 29일
0

99TIL

목록 보기
2/19
post-thumbnail

1. 오늘의 문제

모의고사

2. 문제 분석

  • 수포자 학생들이 3명의 찍는 방식

    • 1번 수포자 : 1, 2, 3, 4, 5, 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, ... ⇾ 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, ... ⇾ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 반복
  • answers : 1번 문제부터 마지막 문제까지의 정답이 순서대로 들어있는 배열

  • 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return

  • 입출력 예시

answersreturn
[1, 2, 3, 4, 5][1]
[1, 3, 2, 4, 2][1, 2, 3]

3. 문제 풀이

  1. 점수가 제일 높은 사람 리턴을 해야 한다는 것, 입출력 예시에서 return 값이 고정된 배열이 아니라 길이가 가변적인 배열이라는 것에서 ArrayList를 활용해야겠다 생각이 들었음
  2. 수포자 패턴을 파악했으니 수포자 패턴 2차원 배열에 할당
  3. 문제의 길이는 결국 answers.length이며, 수포자 패턴은 각 행의 길이별로 반복되고 있음
  4. 점수도 정수형 배열로 선언해 증가 연산자 이용해 정답과 맞으면 점수 올림
  5. 최고 점수 max() 메소드 활용해서 뽑아내고 최고 점수랑 맞은 점수가 같은 학생 ArrayList에 추가.
  6. return 할 때는 ArrayList를 Array로 변환 후 return 해야 함

4. 구현 코드

class Solution {
	public int[] solution(int[] answers) {
    	// 1번 풀이대로 ArrayList부터 생성
        ArrayList<Integer> memberOfMaxScore = new ArrayList<>();
        
        // 2번 수포자 패턴 2차원 배열에 할당
        int[][] supoPatterns = {
        	{1, 2, 3, 4, 5},   // 0 -> 1번
            {2, 1, 2, 3, 2, 4, 2, 5},   // 1 -> 2번
            {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}    // 2 -> 3번
        };
        
        // 3, 4번 실행
        int[] scores = new int[3];
        int n = answers.length;
        
        for (int i = 0; i < n; i++) {
        	for (int j = 0; j < supoPatterns.length; j++) {
            int supoN = supoPatterns[j].length;
            	if (answers[i] == supoPatterns[j][i % supoN]) {
                	scores[j]++;
                }
            }
        }
        
        // 5번 실행
        int maxScore = Math.max(scores[0], Math.max(scores[1], scores[2]));
        for (int i = 0; i < scores.length; i++) {
        	if (maxScore == scores[i]) {
            	memberOfMaxScore.add(i+1);
            }
        }
        
        // 6번 리턴
        return memberOfMaxScore.stream().mapToInt(Integer::intValue).toArray();
    }
}

5. 오늘의 회고

  • 문제를 읽으면서 필요한 변수, 자료구조, 메소드 등을 체크할 수 있게 되었다. 하지만 아직 완벽하게 구현을 하질 못해서 조금 아쉽다.
  • 문제를 파악하고 문제에서 요구하는 기능을 만족시키는 것이 정말 어렵다는 것을 깨달았고 코딩테스트 연습을 지속적으로 실시하면서 열심히 해야겠다.
  • 오늘의 시간은 권장 시간보다 8분 가량 늦게 제출해서 많이 아쉬웠다. 내일은 꼭 권장 시간 안에 넣도록 노력해야겠다!

#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

0개의 댓글