요구능력 : 문자열의 이해
코드설명 :
1. newScore에 따로 넣어준 이유는 한 행에 최대값과 최소값이 1개 초과로 있는지 확인하기 위함이다.
이렇게 한 행에 한 학생의 점수를 넣어줘야 보기도 편리한것같다.
2. i == j는 자기 자신이 채점했을 때를 의미하고, 자기자신이 채점한 인덱스값이 첫번째 최대값 인덱스 값과 같으면 자기자신이 채점한 값이 최대값이라는 의미이다. 여기서 핵심은 자기자신이 채점한 인덱스가 첫번째 최대값 인덱스와 같고, 자기자신이 채점한 인덱스가 마지막 최대값 인덱스와 같으면 유일한 최대값이라는 것이다.
이해가 안갈수도 있으니, 반대의 경우도 적어보자면
자기자신이 채점한 인덱스가 첫번째 최대값 인덱스와 같고, 자기자신이 채점한 인덱스가 마지막 최대값 인덱스와 다르다면 최대값이 2개 존재한다는 의미이다. 그럼 유일한 최대값이 아니게된다.
이후로는 평범한 계산이다.
후기 : 초반에 접근은 잘했는데, 내가 채점했을 시기의 내가 채점한 인덱스가 최고점일 때를 알기위해 내가 채점한 인덱스와 최고점의 퍼스트인덱스와 라스트인덱스를 비교했어야됬는데,
내가채점했을 시기의 최고점퍼스트인덱스와 최고점라스트인덱스만 비교하는 실수를 했다..
문제똑바로읽자
func solution(_ scores:[[Int]]) -> String {
var hakjum: [Character] = []
var sum = 0
var count = 0
var avg = 0
var newScore: [[Int]] = Array(repeating: Array(repeating: 0, count: scores.count), count: scores.count)
for i in 0..<scores.count{ //1번
for j in 0..<scores.count{
newScore[i][j] = scores[j][i]
}
}
for i in 0..<newScore.count{ //2번
for j in 0..<newScore.count{
if i == j, j == newScore[i].firstIndex(of: newScore[i].max()!) && j == newScore[i].lastIndex(of: newScore[i].max()!){
continue
}
else if i == j, j == newScore[i].firstIndex(of: newScore[i].min()!) && j == newScore[i].lastIndex(of: newScore[i].min()!) {
continue
}else {
sum += newScore[i][j]
count += 1
}
}
avg = sum / count
if avg >= 90 {
hakjum.append("A")
}else if avg >= 80{
hakjum.append("B")
}else if avg >= 70{
hakjum.append("C")
}else if avg >= 50{
hakjum.append("D")
}else{
hakjum.append("F")
}
count = 0
sum = 0
}
return "\(hakjum.map{String($0)}.joined(separator: ""))"
}
'Algorithm > 문제풀이_프로그래머스' 카테고리의 다른 글
[Swift][프로그래머스][LV_1] 예산 (0) | 2021.11.19 |
---|---|
[Swift][문자열][LV_2][프로그래머스] 영어 끝말잇기 (0) | 2021.11.19 |
[Swift][문자열][LV2][프로그래머스] 스킬트리 (0) | 2021.11.18 |
[Swift][DFS][LV_2][프로그래머스] 배달 (0) | 2021.11.18 |
[Swift][DFS][LV_1][프로그래머스] 소수 만들기 (0) | 2021.11.06 |
댓글