Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Codable
- swift
- pbxfilesystemsynchronizedrootgroup
- JSONParser
- storybaord
- programmers
- SwiftGen
- JSONSerialization
- Pod
- Decodable
- 티스토리챌린지
- 정보처리기사
- dynamic height
- Custom PageViewController
- UITableView
- pbxgroup
- JSON
- IOS
- PageViewController
- 위클리챌린지
- issecuretextentry
- Xcode
- 정보처리기사 실기
- 정보처리기사 실기 요약본
- cocoapods
- 2018 KAKAO BLIND RECRUITMENT
- 프로그래머스
- parse
- CustomCode
- RealmSwift
Archives
- Today
- Total
iOS 개발일기
[Swift] 프로그래머스(위클리 챌린지 2주차) - 상호 평가 본문
https://programmers.co.kr/learn/courses/30/lessons/83201
나의 풀이
func solution(_ score: [[Int]]) -> String {
var result = ""
score.enumerated().forEach { (x, line) in
var score = [Int]()
for y in 0..<line.count {
score.append(scores[y][x])
}
//자신이 평가한 점수가 최대 혹은 최소 점수일 경우
if score[x] == score.max() || score[x] == score.min() {
//자신이 평가한 점수가 유일한 최대 혹은 최소 점수일 경우
if score.filter({$0 == score[x]}).count == 1 {
score.remove(at: x)
}
}
//평균에 따른 등급 계산
switch score.reduce(0, +)/score.count {
case 90...100:
result += "A"
case 80..<90:
result += "B"
case 70..<80:
result += "C"
case 50..<70:
result += "D"
default:
result += "F"
}
}
return result
}
가독성을 고려한 풀이
func solution(_ scores: [[Int]]) -> String {
var result = ""
scores.enumerated().forEach { (x, line) in
var score = [Int]()
for y in 0..<line.count {
score.append(scores[y][x])
}
let myScore = score[x] //자신이 평가한 점수
let max = score.max() //최대값
let min = score.min() //최소값
//자신이 평가한 점수가 최대 혹은 최소 점수일 경우
if myScore == max || myScore == min {
var count = 0
//자신이 평가한 점수와 동일한 최대 혹은 최소 점수가 있는지 확인
score.enumerated().forEach { (i, value) in
guard score[x] == value else {return}
count += 1
}
//자신이 평가한 점수와 동일한 점수가 없다면 삭제
if count == 1 {
score.remove(at: x)
}
}
//평균에 따른 등급 계산
let avg = score.reduce(0, +)/score.count
switch avg {
case 90...100:
result += "A"
case 80..<90:
result += "B"
case 70..<80:
result += "C"
case 50..<70:
result += "D"
default:
result += "F"
}
}
return result
}
이렇게 두 가지의 풀이를 생각한 다음 테스트를 해보았는데
filter() 함수를 사용한 풀이가 for문을 사용한 풀이보다 전반적으로 완료 시간이 늦었다.
이유를 찾아봐야겠다.
'코딩테스트' 카테고리의 다른 글
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - 숫자 문자열과 영단어 (0) | 2021.08.19 |
---|---|
[Swift] 프로그래머스(위클리 챌린지 1주차) -부족한 금액 계산하기 (0) | 2021.08.06 |
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - [1차] 비밀지도 (0) | 2021.08.06 |
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - [1차] 다트 게임 (0) | 2021.08.05 |