코딩 테스트/Level 1
위클리 챌린지 2주차 상호평가
컴닥
2021. 8. 14. 16:05
반응형
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
파이썬
def solution(scores):
answer = ""
for i, score in enumerate(map(list, zip(*scores))):
if score.count(score[i]) == 1 and (score[i] == min(score) or score[i] == max(score)):
del score[i]
if (average := sum(score) // len(score)) >= 90:
answer += 'A'
elif average >= 80:
answer += 'B'
elif average >= 70:
answer += 'C'
elif average >= 50:
answer += 'D'
else:
answer += 'F'
return answer
def solution(scores):
answer = ""
grade = "FFFFFDDCBAA"
for i, score in enumerate(map(list, zip(*scores))):
if score.count(score[i]) == 1 and (score[i] == min(score) or score[i] == max(score)):
del score[i]
answer += grade[sum(score) // len(score) // 10]
return answer
컴프리헨션을 사용해서...
del 을 쓰지 않기 때문에 리스트보다 빠른 튜플을 쓸 수 있다.
def solution(scores):
return ''.join(map(lambda x: 'FFFFFDDCBAA'[x], (sum(score) // len(scores) // 10
if not (score.count(score[i]) == 1 and (score[i] == min(score) or score[i] == max(score))) else
(sum(score) - score[i]) // (len(scores) - 1) // 10
for i, score in enumerate(map(tuple, zip(*scores))))))
PEP 위반이니까 재미로만...
solution = lambda scores: ''.join(map(lambda x: 'FFFFFDDCBAA'[x], (sum(score) // len(scores) // 10
if not (score.count(score[i]) == 1 and (score[i] == min(score) or score[i] == max(score))) else
(sum(score) - score[i]) // (len(scores) - 1) // 10
for i, score in enumerate(map(tuple, zip(*scores))))))
golang
func solution(scores [][]int) (result string) {
grade := "FFFFFDDCBAA"
for j := 0; j < len(scores); j++ {
sum := 0
length := len(scores)
maxIndex, maxScore := 0, scores[0][j]
minIndex, minScore := 0, scores[0][j]
only := true
for i := 0; i < length; i++ {
if i != j && scores[j][j] == scores[i][j] {
only = false
}
if maxScore < scores[i][j] {
maxScore = scores[i][j]
maxIndex = i
}
if minScore > scores[i][j] {
minScore = scores[i][j]
minIndex = i
}
sum += scores[i][j]
}
if only == true && maxIndex == j {
sum -= maxScore
length -= 1
} else if only == true && minIndex == j {
sum -= minScore
length -= 1
}
result += string(grade[sum/length/10])
}
return
}
문자열의 길이를 알 수 있는 경우, 문자열보다는 []rune이나 []byte가 더 좋긴 하다.
func solution(scores [][]int) string {
grade := "FFFFFDDCBAA"
result := make([]byte, len(scores))
for j := 0; j < len(scores); j++ {
sum := 0
length := len(scores)
maxIndex, maxScore := 0, scores[0][j]
minIndex, minScore := 0, scores[0][j]
only := true
for i := 0; i < length; i++ {
if i != j && scores[j][j] == scores[i][j] {
only = false
}
if maxScore < scores[i][j] {
maxScore = scores[i][j]
maxIndex = i
}
if minScore > scores[i][j] {
minScore = scores[i][j]
minIndex = i
}
sum += scores[i][j]
}
if only == true && maxIndex == j {
sum -= maxScore
length -= 1
} else if only == true && minIndex == j {
sum -= minScore
length -= 1
}
result[j] = grade[sum/length/10]
}
return string(result)
}
한 줄이라도 더 줄이기 위해... 이럴 수도 있겠지만... 무슨 의미가...
func solution(scores [][]int) string {
result := make([]byte, len(scores))
for j := 0; j < len(scores); j++ {
sum := 0
length := len(scores)
maxIndex, maxScore := 0, scores[0][j]
minIndex, minScore := 0, scores[0][j]
only := true
for i := 0; i < length; i++ {
if i != j && scores[j][j] == scores[i][j] {
only = false
}
if maxScore < scores[i][j] {
maxScore = scores[i][j]
maxIndex = i
}
if minScore > scores[i][j] {
minScore = scores[i][j]
minIndex = i
}
sum += scores[i][j]
}
if only == true && maxIndex == j {
sum -= maxScore
length -= 1
} else if only == true && minIndex == j {
sum -= minScore
length -= 1
}
result[j] = "FFFFFDDCBAA"[sum/length/10]
}
return string(result)
}
줄여보았다..
func solution(scores [][]int) (result string) {
for i := 0; i < len(scores); i++ {
sum, length := 0, len(scores[0])
max_val, min_val := 0, 100
for j := 0; j < len(scores); j++ {
if i == j {
continue
}
if scores[j][i] > max_val {
max_val = scores[j][i]
}
if scores[j][i] < min_val {
min_val = scores[j][i]
}
sum += scores[j][i]
}
if max_val < scores[i][i] || min_val > scores[i][i] {
length--
} else {
sum += scores[i][i]
}
result += string("FFFFFDDCBAA"[sum/length/10])
}
return
}
반응형