99클럽 코테 스터디 4기 20일차 TIL - 프로그래머스: 모의고사(42840) Swift & Python

레일리·2024년 11월 16일
0
post-thumbnail

ℹ️ 문제 정보

플랫폼번호제목유형난이도언어
프로그래머스42840모의고사완전탐색Lv.1Swift, Python

🚀 나의 접근 방법

다 탐색을 하는 거라 특별한 알고리즘은 없다. 얼마나 간결하게 코드를 작성하느냐가 중요하다.

1번 수포자가 찍는 방식 : 1, 2, 3, 4, 5 ... 반복 (5개)
2번 수포자가 찍는 방식 : 2, 1, 2, 3, 2, 4, 2, 5 ... 반복 (8개)
3번 수포자가 찍는 방식 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 ... 반복 (10개)

문제 정답(answers)이 리스트로 주어졌다. 그리고 answers의 각 index로 index%(반복되는 답 개수)를 계산하여 각 수포자가 찍는 답을 알 수 있다.
⬇️ 예시

pick = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]
for i, answer in enumerate(answers):
    if answer == pick[0][i%5]: result[0][1] += 1
    if answer == pick[1][i%8]: result[1][1] += 1
    if answer == pick[2][i%10]: result[2][1] += 1

그리고 조건에 맞게 가장 많은 문제를 맞힌 사람을 return하면 된다.

✍️ 나의 코드

Swift

import Foundation

func solution(_ answers:[Int]) -> [Int] {
    let pick = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]
    
    var result: [(Int, Int)] = [(1, 0), (2, 0), (3, 0)]
    for (j, ans) in answers.enumerated() {
        if ans == pick[0][j%5] { result[0].1 += 1 }
        if ans == pick[1][j%8] { result[1].1 += 1 }
        if ans == pick[2][j%10] { result[2].1 += 1 }
    }
    
    return result.filter{$0.1 == result.max{$0.1 < $1.1}!.1}.map{$0.0}
}

Python

def solution(answers):
    pick = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]
    
    result = [[1, 0], [2, 0], [3, 0]]
    for i, answer in enumerate(answers):
        if answer == pick[0][i%5]: result[0][1] += 1
        if answer == pick[1][i%8]: result[1][1] += 1
        if answer == pick[2][i%10]: result[2][1] += 1

    return list(map(lambda item: item[0], list(filter(lambda item: item[1] == max(result, key=lambda item: item[1])[1], result))))

🤔 회고

고차함수 남용

python 마지막 줄을 보면 고차함수가 매우 복잡하게 섞여있다. 저 정도면 그냥 반복문으로 하는것이 더욱 가독성이 좋을것 같다.

Swift와 Python에서 Tuple의 차이점

  • swift 튜플의 요솟값은 변화 가능하다.
  • python 튜플의 요솟값은 변화가 불가능하다.
profile
나야, 개발자

0개의 댓글