https://programmers.co.kr/learn/courses/30/lessons/85002?language=swift
코딩테스트 연습 - 6주차_복서 정렬하기
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요
programmers.co.kr
func solution(_ weights:[Int], _ head2head:[String]) -> [Int] {
var results = [[Double]]()
for i in 0 ..< weights.count {
let result = head2head[i].map { $0 }
// 경기 수
var matchCount: Double = 0.0
// 승 수
var win: Double = 0.0
// 자기보다 무거운 사람을 이긴 수
var winFromHeavy = 0
for j in 0 ..< weights.count {
if i == j {
continue
} else {
//경기 하지 않는 경우는 넘어감
guard result[j] != "N" else { continue }
// 이기거나 진 경우 경기 수를 1 증가
matchCount += 1
if result[j] == "W" {
//이긴 경우는 승 수 1 증가
win += 1
if weights[i] < weights[j] {
//만약 더 무거운 사람이라면 무거운 사람 이긴 수 1 증가
winFromHeavy += 1
}
}
}
}
var winRate: Double = 0.0
if matchCount == 0.0 {
winRate = 0.0
} else {
winRate = win / matchCount
}
let array: [Double] = [winRate, Double(winFromHeavy), Double(weights[i]), Double(i + 1)]
/**
// 승률, 무거운 사람을 이긴 승률, 무게, 번호
// 문제에서 제시한 기준으로 정렬
*/
results.append(array)
}
// 정렬 된 결과를 바탕으로 결과 도출
results = results.sorted { first, second in
if first[0] < second[0] {
return false
} else if first[0] == second[0] {
if first[1] < second[1] {
return false
} else if first[1] == second[1] {
if first[2] < second[2] {
return false
} else if first[2] == second[2] {
if first[3] > second[3] {
return false
}
}
}
}
return true
}
return results.map{ Int($0[3]) }
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
위클리 챌린지 - 4주차_직업군 추천하기 (0) | 2021.09.28 |
---|---|
위클리 챌린지 - 7주차_입실 퇴실 (0) | 2021.09.28 |
프로그래머스 - 순위검색 (0) | 2021.05.03 |
프로그래머스 - 메뉴리뉴얼 (0) | 2021.02.23 |
프로그래머스 - 다트게임 (0) | 2021.02.09 |