입력받은 배열의 등수를 구하시오

2차원 배열을 하나도 모를때는 지옥을 보는 것 같았는데
좀 만나봤더니 그나마...그나마 감이 잡힌다.

아래는 코드

function takeRank(arr) {
  let i = 0;
  let answer = Array.from({ length: arr.length }, () => 1);
  while (i < arr.length) {
    arr.map((a, b) => {return arr[b] > arr[i] ? answer[i]++ : arr;});
    i += 1;
  }
  return answer;
}
const arr = [87,89,92,100,76]
takeRank(arr)

지금까지 문제들은 이중배열의 구조를 사용하더라도 그냥 새로 배열 만들어서 값을 출력했는데
이번에는 구조가 조금 다르기도 했고
Array.from()으로 새로운 배열을 만들라는게 조건이여서 새로 만들어서 진행을 했다

  1. 반복문, 계산에서 사용할 i = 0 선언
  2. 새로운 배열을 arr.length의 길이만큼, 모양은 숫자가 들어갈거라서 1을 선언
  3. 구분을 총 5번을 해야해서 0부터 arr.length(4)까지 반복문이 돌아가고
    한번 루프가 돌면 i가 i+1이 된다. 저거 i++도 되...나? 안돼!
  4. 그리고 비교가 시작된다.
while (0 < arr.length) {
    arr.map((87, 0) => {return 87 > 87 ? answer[0]++ : arr;});
    arr.map((89, 1) => {return 89 > 87 ? answer[0]++ : arr;});
    arr.map((92, 2) => {return 92 > 87 ? answer[0]++ : arr;});
    arr.map((100, 3) => {return 100 > 87 ? answer[0]++ : arr;});
    arr.map((76, 4) => {return 76 > 87 ? answer[0]++ : arr;});
    i += 1;
    }
 answer = [4,1,1,1,1] // 3번의 true가 실행됐다.
while (1 < arr.length) {
    arr.map((87, 0) => {return 87 > 89 ? answer[1]++ : arr;});
    arr.map((89, 1) => {return 89 > 89 ? answer[1]++ : arr;});
    arr.map((92, 2) => {return 92 > 89 ? answer[1]++ : arr;});
    arr.map((100, 3) => {return 100 > 89 ? answer[1]++ : arr;});
    arr.map((76, 4) => {return 76 > 89 ? answer[1]++ : arr;});
    i += 1;
    }
 answer = [4,3,1,1,1] // 2번의 true가 실행됐다.
while (2 < arr.length) {
    arr.map((87, 0) => {return 87 > 92 ? answer[2]++ : arr;});
    arr.map((89, 1) => {return 89 > 92 ? answer[2]++ : arr;});
    arr.map((92, 2) => {return 92 > 92 ? answer[2]++ : arr;});
    arr.map((100, 3) => {return 100 > 92 ? answer[2]++ : arr;});
    arr.map((76, 4) => {return 76 > 92 ? answer[2]++ : arr;});
    i += 1;
    }
    answer = [4,3,2,1,1] // 1번의 true가 실행됐다.
while (3 < arr.length) {
   arr.map((87, 0) => {return 87 > 100 ? answer[3]++ : arr;});
   arr.map((89, 1) => {return 89 > 100 ? answer[3]++ : arr;});
   arr.map((92, 2) => {return 92 > 100 ? answer[3]++ : arr;});
   arr.map((100, 3) => {return 100 > 100 ? answer[3]++ : arr;});
   arr.map((76, 4) => {return 76 > 100 ? answer[3]++ : arr;});
   i += 1;
   }
   answer = [4,3,2,1,1] // 0번의 true가 실행됐다.
while (4 < arr.length) {
  arr.map((87, 0) => {return 87 > 76 ? answer[4]++ : arr;});
  arr.map((89, 1) => {return 89 > 76 ? answer[4]++ : arr;});
  arr.map((92, 2) => {return 92 > 76 ? answer[4]++ : arr;});
  arr.map((100, 3) => {return 100 > 76 ? answer[4]++ : arr;});
  arr.map((76, 4) => {return 76 > 76 ? answer[4]++ : arr;});
  i += 1;
  }
  answer = [4,3,2,1,5] // 4번의 true가 실행됐다.
  1. 이러고 반복문이 종료되면서 answer의 값을 리턴하여 [4,3,2,1,5]이 출력된다.
    그리고 좀 보기 좋게 삼항연산자를 사용했는데, 지금 falsy 값이 쓰레기값이라서....
    그냥 if문으로
if(arr[b] > arr[i]){
answer[i]++
}

이쪽이 코드 리딩이 더 좋다고 생각한다

좋은 웹페이지 즐겨찾기