Where who wants to meet someone
전국 대회 선발 고사 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181851
내 답안 / 다른 사람들의 답안
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.05.08 |
---|---|
그림 확대 (0) | 2024.03.19 |
무작위로 K개의 수 뽑기 (0) | 2024.02.18 |
두 수의 합 (0) | 2024.02.18 |
커피 심부름 (0) | 2024.02.16 |