코딩 테스트 연습 - 모의고사(프로그래머스 레벨1)

다용도리모콘·2020년 3월 11일
0

CodingTest

목록 보기
1/34

문제

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

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번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

https://programmers.co.kr/learn/courses/30/lessons/42840

이해

세 명의 수포자의 답안 패턴과 정답 리스트를 매칭 했을 때 가장 많이 맞춘 사람을 반환
동점자가 있으면 오름차 순 리스트로 반환

계획

정답 리스트를 하나씩 읽어가면서 각각의 수포자 답안과 비교한다.
비교해서 일치하는 수포자의 총 정답 수를 증가 시킨다.
비교가 끝나면 정답 수가 제일 많은 사람의 번호를 배열에 넣고 배열을 반환한다.

실행

fun solution(answers : IntArray) : IntArray {

        val student1 = arrayOf(1,2,3,4,5)
        val student2 = arrayOf(2,1,2,3,2,4,2,5)
        val student3 = arrayOf(3,3,1,1,2,2,4,4,5,5)

        var answerCount = arrayOf(0,0,0)

        answers.forEachIndexed { index,
                                 i ->
            if (i == student1[index.rem(student1.size)]) answerCount[0]++
            if (i == student2[index.rem(student2.size)]) answerCount[1]++
            if (i == student3[index.rem(student3.size)]) answerCount[2]++
        }

        val result = arrayListOf<Int>()

        if (answerCount[0] == answerCount.max())
            result.add(1)
        if (answerCount[1] == answerCount.max())
            result.add(2)
        if (answerCount[2] == answerCount.max())
            result.add(3)

        return result.toIntArray()
    }

회고

코딩 테스트 훈련 가이드를 안 읽고 진행했더니 코드짜기 -> 테스트 케이스 돌리기 -> 엣지 케이스 생각하기 -> 코드에 반영이라는 요상한 순서로 문제를 풀어버렸다.
덕분에 엣지케이스를 생각 안하고 짠 첫 코드는 폭죽처럼 마구 터졌다.
다음 부터는 How to solve it 순서를 잘 지켜 풀어야겠다.

*아직 모르는 kotlin 문법이 너무 많은 것 같다. 이력서에 코틀린 한다고 적었는데 망한 듯.

0개의 댓글