반응형
문제
나의 풀이
function solution(scores) {
//배열 뒤집기
for(let i =0 ; i < scores.length;i++){
for(let j = i ; j < scores[0].length;j++){
let tmp = scores[i][j]
scores[i][j] = scores[j][i]
scores[j][i] = tmp;
}
}
//최고, 최저점수 제거
for(let i = 0 ; i < scores.length;i++){
const max = Math.max(...scores[i]);
const min = Math.min(...scores[i]);
if(scores[i][i] === max){
scores[i].splice(i,1);
if(scores[i].includes(max)){
scores[i].push(max)
}
}
if(scores[i][i] === min){
scores[i].splice(i,1);
if(scores[i].includes(min)){
scores[i].push(min)
}
}
}
//점수들 평균 구하기
scores = scores.map(score => score.reduce((acc,cur)=>acc +=cur)/score.length)
//점수에 따른 학점부여
scores = scores.map(score => {
if(score >= 90){
return "A"
}
if( 80 <= score && score < 90){
return "B"
}
if( 70 <= score && score < 80){
return "C"
}
if( 50 <= score && score <70){
return "D"
}
if( score < 50){
return "F"
}
})
return scores.join("");
}
비교할 대상을 한 배열로 만들기 위해서 배열을 뒤집어 주었고, 이 후 최고,최저점을 확인하고 제거하였으며, 최고,최저점이 혼자만이 아닐때는 다시 넣어주었다. 이후 평균을 계산하고 점수에 따른 학점을 부여하였다.
다른이의 풀이 보완
- 처음 배열을 뒤집어 줄때
//배열 뒤집기
for(let i =0 ; i < scores.length;i++){
for(let j = i ; j < scores[0].length;j++){
let tmp = scores[i][j]
scores[i][j] = scores[j][i]
scores[j][i] = tmp;
}
}
이렇게 for문을 2번 사용하여 구현하였는데,
scores[0].map((_, c) => scores.map(r => r[c]))
요런식으로 map을 통하면 한줄로 깔끔하게 가능하다.
- 같은 변수를 사용할때는 chaining을 이용해보자.
예시 ) scores.map( -- ).map( -- )
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level3. 가장 먼 노드 (javascript) (0) | 2021.11.19 |
---|---|
[프로그래머스] level3. 디스크 컨트롤러 (javascript) (0) | 2021.11.07 |
[프로그래머스] level2. 큰 수 만들기 (javascript) (0) | 2021.09.01 |
[프로그래머스] level2. [3차] 압축 (javascript) (0) | 2021.08.31 |
[프로그래머스] level2. 구명보트 (javascript) (0) | 2021.08.26 |