Where who wants to meet someone

전국 대회 선발 고사 본문

프로그래머스 알고리즘 문제 기록/코딩 기초 트레이닝

전국 대회 선발 고사

Lust3r 2024. 3. 16. 15:21
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181851

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

import Foundation

func solution(_ rank:[Int], _ attendance:[Bool]) -> Int {
    var attendanceRank = [Int]()

    while attendanceRank.count < 3 {
        for i in 1...rank.count {
            if let index = rank.firstIndex(of: i), attendance[index] != false {
                attendanceRank.append(Int(index))
            }
        }
    }

    return 10000 * attendanceRank[0] + 100 * attendanceRank[1] + attendanceRank[2]
}

- attendanceRank의 count가 3이 될 때까지 while문 반복(상위 3명만 뽑을 것이므로)

- 순위(rank)는 rank의 count만큼 있을 것이므로 1부터 rank.count까지 반복하면서 index를 찾고, attendance의 해당 인덱스가 false가 아니라면 해당 인덱스의 Int값 변환한 것을 attendanceRank에 추가

- 이후 각 인덱스에 수를 곱하고 더하여 반환

 

import Foundation

func solution(_ rank:[Int], _ attendance:[Bool]) -> Int {
    let stu: [Int] = rank.enumerated()
        .filter { attendance[$0.offset] }
        .sorted(by: { $0.element < $1.element })
        .map { $0.offset }
    return stu[0] * 10000 + stu[1] * 100 + stu[2]
}

- enumerated로 (offset, element) 짝을 만들어 .filter로 attendance의 각 offset이 true인 것만 모은 다음

- element 오름차순으로 sorted하고 map을 통해 각 항목의 offset만 남긴 다음 반환하는 방법이 있었다.

 

점수: ?

'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글

그림 확대  (0) 2024.03.19
무작위로 K개의 수 뽑기  (0) 2024.02.18
두 수의 합  (0) 2024.02.18
커피 심부름  (0) 2024.02.16
문자열이 몇 번 등장하는지 세기  (0) 2024.02.16