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 |
Tags
- 정보처리기사 실기 요약본
- programmers
- ios캡처감지
- 위클리챌린지
- 프로그래머스
- AVFoundation
- 정보처리기사
- Codable
- Pod
- 2018 KAKAO BLIND RECRUITMENT
- 외부카메라감지
- usb카메라연결
- parse
- ios외부카메라연결
- Xcode
- cancelstouchesinview
- JSON
- UITableView
- IOS
- Decodable
- JSONParser
- ios외부디바이스연결
- 정보처리기사 실기
- ios카메라유선연결
- CustomCode
- cocoapods
- avcapturesession
- swift
- ios캡처방지
- 카메라유선연결
Archives
- Today
- Total
iOS 개발일기
[Swift] 프로그래머스(위클리 챌린지 2주차) - 상호 평가 본문
https://programmers.co.kr/learn/courses/30/lessons/83201
코딩테스트 연습 - 2주차
[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD"
programmers.co.kr
나의 풀이
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 |