35. 프로그래머스(1단계) - 2주차, 상호평가

성훈·2021년 8월 23일
0

Algorithm

목록 보기
35/61
post-thumbnail

📌 문제의 조건


너무 길어

제한사항 🤔

  • 2 ≤ scores의 행의 길이(학생 수) ≤ 10
  • scores의 열의 길이 = scores의 행의 길이
    • 즉, scores는 행과 열의 길이가 같은 2차원 배열입니다.
  • 0 ≤ scores의 원소 ≤ 100
  • return 값 형식
    • 0번 학생의 학점부터 차례대로 이어 붙인 하나의 문자열을 return 합니다.

📌 풀이

풀이 👨‍💻

function solution(scores) {
  let averages = [],
    result = "";
  for (let i = 0; i < scores.length; i++) {
    let score = [];
    let highest = scores[0][i];
    let lowest = scores[0][i];
    for (let j = 0; j < scores.length; j++) {
      score[j] = scores[j][i];
    }
    for (let elem of score) {
      if (highest < elem) {
        highest = elem;
      }
      if (lowest > elem) {
        lowest = elem;
      }
    }
    if (
      (score[i] === highest &&
        score.filter((e) => e === highest).length === 1) ||
      (score[i] === lowest && score.filter((e) => e === lowest).length === 1)
    ) {
      score.splice(i, 1);
    }
    averages.push(score.reduce((acc, cur) => acc + cur, 0) / score.length);
  }
  for (let score of averages) {
    if (score >= 90) {
      result = result + "A";
    } else if (score >= 80) {
      result = result + "B";
    } else if (score >= 70) {
      result = result + "C";
    } else if (score >= 50) {
      result = result + "D";
    } else {
      result = result + "F";
    }
  }

  return result;
}

📌 리뷰

단순하기 짝이 없는 코드다.
반복문 돌려서 한 사람의 평가를 한 배열에 담고, 그 배열 속에서 자기가 본인한테 준 점수가 최고점이거나 최하점일때 다른 사람이 준 점수와 겹치지 않는다면 없애고 평균 값을 구한 후 평균값을 구한 배열에 담았다.
그리고 마지막으로 반복문을 한번 더 돌려서 점수에 따라 미리 선언해둔 빈 문자열에 채워넣고 그걸 반환했다.

되게 당연한 코드를 당연하게 써내려갔는데 제출하면서도 이게 안되면 안되지 ㅋㅋ 라는 생각을 가짐과 동시에 분명 말도 안되게 짧게 작성된 코드가 있을거란 생각을 가졌다.

물론, 그런 코드는 있었고 공부 열심해 해야겠구나 다시 한번 생각하게 만들어줬다.
나한테 30줄 넘는 코드를 7줄로

📌 문제 출처

출처: 프로그래머스 코딩 테스트 연습,

https://programmers.co.kr/learn/challenges#

profile
어떻게 이걸 풀어낼 수 있을까

0개의 댓글