01-31 00:40
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
관리 메뉴

기록을 합시다.

[프로그래머스] 모의고사(python/java) 본문

공부/알고리즘

[프로그래머스] 모의고사(python/java)

울집고양이세마리 2023. 6. 12. 02:44

문제 요약

  • 문제를 푸는 사람은 총 세 명, 각각 문제를 찍는 방법은 다르다.
  • 문제의 정답을 제일 많이 맞춘 사람(사람들)의 배열이 답이다.

내가 생각한 로직

  • 각각의 사람들과 정답을 비교하여, scores라는 배열에 사람들의 점수를 담는다.
  • 배열의 최대값을 구하여, 사람들이 최대값을 충족하는지 확인하고, 만약 충족한다면 새 배열에 사람을 담는다.

python으로 제출한 정답

def solution(answers):
    length = len(answers)

    first_person_answer = [1,2,3,4,5] * 5001
    second_person_answer = [2,1,2,3,2,4,2,5] * 1251
    third_person_answer = [3,3,1,1,2,2,4,4,5,5] * 1001

    scores = [0, 0, 0]

    for i in range(0, length):
        scores[0] += 1 if first_person_answer[i] == answers[i] else 0
        scores[1] += 1 if second_person_answer[i] == answers[i] else 0
        scores[2] += 1 if third_person_answer[i] == answers[i] else 0

    great_score = max(scores)
    great_scorer = [i+1 for i in range(0,3) if scores[i] == great_score]

    return great_scorer

java로 제출한 정답

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] mathGiveUpPerson1 = {1, 2, 3, 4, 5}; //5개
        int[] mathGiveUpPerson2 = {2, 1, 2, 3, 2, 4, 2, 5}; //8개 
        int[] mathGiveUpPerson3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; //10개 

        int modular1 = 0;
        int modular2 = 0;
        int modular3 = 0;

        int[] scores = new int[3];

        for(int i = 0; i < answers.length; i++){
            modular1 = i%5;
            modular2 = i%8;
            modular3 = i%10;

            if(answers[i] == mathGiveUpPerson1[modular1]){
                scores[0] += 1; 
            }
            if(answers[i] == mathGiveUpPerson2[modular2]){
                scores[1] += 1;
            }
            if(answers[i] == mathGiveUpPerson3[modular3]){
                scores[2] += 1; 
            }
        }

        int maxScore = -1; 
        List<Integer> answer = new ArrayList<>();

        for(int j = 0; j < scores.length; j++){
            if(scores[j] > maxScore){
                maxScore = scores[j];
            }
        }

        for(int k = 0; k < scores.length; k++){
            if(maxScore == scores[k]){
                answer.add(k+1);
            }
        }

        int[] realAnswer = new int[answer.size()]; 

        for(int l = 0 ; l < realAnswer.length; l++){
            realAnswer[l] = answer.get(l);
        }

        return realAnswer;
    }
}

사담

파이썬 하다가 자바로 코테 풀어보려고 하니까 조금 힘들다 ㅋㅋㅋㅋㅋㅋㅋ

Comments