티스토리 뷰

배열의 유사도

//for ... in 반복문: key 를 뽑을 때 주로 사용 (배열에 사용하기엔 의미가 없음)
//for ... of 반복문: es6에 추가된 새로운 컬렉션 전용 반복 구문, iterable 객체의 value 반복문

function solution(s1, s2) {
  let answer = [];
  for (i of s1) {
    for (j of s2) {
      if (i === j) {
        answer.push(i);
      }
    }
  }
  return answer.length;
}

//내 답은 이중 for문을 사용하였는데 성능적으로 좋은 코드는 아니다.
//그렇다면 가독성이라도 좋아야 하는데 내장 메서드를 활용하지 못한 점이 아쉽다.

// 다른 사람 풀이
// 검색 키워드로 js "교집합"을 구하는 공식 같은 것을 찾아보면 좋을 듯
// filter() : 해당 조건에 부합하는 요소를 새 배열에 리턴한다.
// includes() : 배열이 특정 요소를 포함하고 있는 지 판별한다. 반환값은 boolean
// includes 에 true값인 아이들만 새 배열로해서 반환한다.
// 간결하면서 의미가 명확한 좋은 코드 같다.
{
  function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
  }
}

옷가게 할인 받기

//문제 설명
// 머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
// 구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

//제한 사항
// 10 ≤ price ≤ 1,000,000 -> 양의 정수
// price는 10원 단위로(1의 자리가 0) 주어집니다. -> 가격은 10원 단위
// 소수점 이하를 버린 정수를 return합니다. -> Math.floor()

// 입출력 예
// price	result
// 150,000	142,500
// 580,000	464,000

// 입출력 예 설명
// 입출력 예 #1

// 150,000원에서 5%를 할인한 142,500원을 return 합니다.
// 입출력 예 #2

// 580,000원에서 20%를 할인한 464,000원을 return 합니다

function solution(price) {
  if (price >= 500000) {
    price *= 0.8;
  } else if (price >= 300000) {
    price *= 0.9;
  } else if (price >= 100000) {
    price *= 0.95;
  }
  return Math.floor(price);
}
//결론: 소수점을 버리는 용도로는 Math.floor보다는 parseInt가 나은 거 같다.

//다른 분 풀이 2차 배열, for of 문법 활용

{
  const discounts = [
    [500000, 20],
    [300000, 10],
    [100000, 5],
  ];

  //
  const solution = (price) => {
    for (const discount of discounts)
      if (price >= discount[0])
        return Math.floor(price - (price * discount[1]) / 100);
    return price;
  };

  console.log(solution(150000)); //142500
}

중앙값 구하기

// 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다.
//예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
// 제한 사항: array의 길이는 홀수
// 0 < array.length < 100
// -1000 < array의 원소 < 1000

// sort()는 원본을 변형함(새 배열 반환x)

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}
solution([1, 3, 4, 5, 6]);

 

이전에 많이 쓴 메서드들인데 막상 또 다시 하려니 까먹어서 다시 찾아보는 일이 부지기수.. 자주 문제를 풀어야 겠다. 
제한 사항을 제대로 볼 것, 디버깅을 습관화했더니 값이 어디서 잘못들어가는 지 찾는 것은 어렵지 않았다.
다만, 다음에는 내 수준보다 높은 문제를 적은 수라도 도전해봐야겠다. 

 

댓글