[Level 1 / 완전탐색] 모의고사 + Swift

sanghee·2021년 8월 8일
0

🙈코딩테스트

목록 보기
2/52
post-thumbnail

프로그래머스 문제

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

오류 코드

각각 수포자가 찍는 패턴을 p1, p2, p3로 정의하였다. 그리고 인덱스를 0부터 answers의 길이 전까지 돌리면서 정답이면 counts에 해당하는 수포자의 value를 1 더하는 방식으로 채점하였다. 그리고 최대 정답자의 번호를 오름차순으로 정렬해 반환하였다.

그런데 제출해보니 오류가 발생하였다.😱

func solution(_ answers:[Int]) -> [Int] {
    let p1 = [1, 2, 3, 4, 5]
    let p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    let p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
 
    var counts = [1: 0, 2: 0, 3: 0]
        
    for i in 0..<answers.count {
        if answers[i] == p1[i] { counts[1]! += 1 }
        if answers[i] == p2[i] { counts[2]! += 1 }
        if answers[i] == p3[i] { counts[3]! += 1 }
    }
    
    return counts.filter { $0.value == counts.values.max() }.keys.sorted()
}

실패 (signal: illegal instruction (core dumped))😱

구글링해보니 보통은 Array의 Index out of range 문제, 옵셔널 문제, 잘못된 수식 문제라고 한다. 뭐가 문제일까.

문제를 푸는 패턴 길이에 따라 나누기

이전에 풀었어서 기본적인 실수를 하고 말았다😂. 애초에 p1, p2, p3라고 정의한 게 문제를 푸는 패턴때문이었는데 말이다. 인덱스를 각각 패턴 길이에 따라 나눴다.

func solution(_ answers:[Int]) -> [Int] {
    let p1 = [1, 2, 3, 4, 5]
    let p2 = [2, 1, 2, 3, 2, 4, 2, 5]
    let p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
 
    var counts = [1: 0, 2: 0, 3: 0]

    for i in 0..<answers.count {
        if answers[i] == p1[i % 5] { counts[1]! += 1 }
        if answers[i] == p2[i % 8] { counts[2]! += 1 }
        if answers[i] == p3[i % 10] { counts[3]! += 1 }
    }
            
    return counts.filter { $0.value == counts.values.max() }.keys.sorted()
}

깃허브 커밋 주소

GitHub - 모의고사

profile
👩‍💻

0개의 댓글