본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[이코테] 그리디_숫자 카드 게임

by codingBear 2022. 9. 16.
728x90
반응형

 이번 글은 '이것이 취업을 위한 코딩 테스트다 with 파이썬' 내 문제를 풀고, 정답 코드를 정리한 것입니다.


문제


풀이 과정

 이번 문제는 주어진 배열에서 최솟값과 최댓값만 뽑아낼 줄 알면 쉽게 풀 수 있는 문제이다. 내 풀이의 경우 먼저 input값을 정제하여 이중배열을 만들고 이중배열의 행을 탐색하기 위해 n만큼 for문을 돌며 배열을 탐색한다. 이후 각 행의 가장 첫 값을 변수 min에 최솟값이라고 임의로 할당하고 각 열의 다음 값과 최솟값을 비교하기 위해 한 번더 배열을 행의 길이만큼 돈다. 이렇게 안쪽 배열을 탐색하며 앞서 할당한 min보다 작은 값이 나올 경우 min을 그 값으로 치환한다. 이후 이렇게 찾아낸 각 행의 최솟값을 정답 배열에 담고 정답 배열을 내림차순으로 정렬한 다음 맨 첫 번째 값을 리턴하면 정답이다. 즉 각 행의 최솟값을 구해 그 최솟값 중 가장 큰 값을 반환하면 되는 것이다.


정답 코드

My Solution
function mySolution(_n, _m, _data) {
  const ans = [];
  for (let i = 0; i < _n; i++) {
    let min = +_data[i][0];

    for (let j = 0; j < _data[i].length; j++) {
      if (min === 0) continue;
      let next = +_data[i][j];

      if (min > next) {
        min = next;
      }
    }
    ans.push(min);
  }

  return ans.sort((a, b) => b - a)[0];
}

Answer

1. Math.min() & Math.max() 활용 Ver.
function minMaxSolution(_n, _m, _data) {
  const ans = [];

  for (let i of _data) {
    const arr = i;
    const min = Math.min(...arr);
    ans.push(min);
  }

  return Math.max(...ans);
}

2. 2중 for문 Ver.
function forLoopSolution(_n, _m, _data) {
  const ans = [];

  for (let i of _data) {
    const arr = i;
    let min = 10001;

    for (let j of arr) {
      if (min > +j) {
        min = j;
      }
    }
    ans.push(min);
  }

  return Math.max(...ans);
}


함께 보기

Math.max()

 

Math.max() - JavaScript | MDN

The Math.max() function returns the largest of the numbers given as input parameters, or -Infinity if there are no parameters.

developer.mozilla.org

Math.min()

 

Math.min() - JavaScript | MDN

The Math.min() function returns the smallest of the numbers given as input parameters, or Infinity if there are no parameters.

developer.mozilla.org

 

728x90
반응형

댓글