알고리즘 | 10부제

sik2·2021년 10월 18일
0

Algorithm

목록 보기
8/10

문제

10부제 차량 검사 함수 구현

서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금 지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하 지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한 다.
여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성하세요.

▣ 입력설명
첫 줄에는 날짜의 일의 자리 숫자가 주어지고 두 번째 줄에는 7대의 자동차 번호의 끝 두 자 리 숫자가 주어진다.

▣ 출력설명
주어진 날짜와 자동차의 일의 자리 숫자를 보고 10부제를 위반하는 차량의 대수를 출력합니 다.

▣ 입력예제 1
3
25 23 11 47 53 17 33
▣ 출력예제 1 3

▣ 입력예제 2
0
12 20 54 30 87 91 30
▣ 출력예제 2 3

나의 풀이


const soluation = function(todayNum, arr) {
  const answer = [];

  arr.forEach(row => {
    const spread = row.toString().split("");
    const deduple = Array.from(new Set(spread));

    deduple.forEach(i => {
      if(Number(i) === todayNum) {
        answer.push(row);
      }
    });
  });

  return answer.length;
}

const arr1 = [25, 23, 11, 47, 53, 17, 33];
console.log(soluation(3, arr1));

const arr2 = [12, 20, 54, 30, 87, 91, 30];
console.log(soluation(0, arr2));
  • 날짜 배열을 받아 숫자 요소를 문자열로 만들어 배열화 시켰다.
  • 해당배열을 중복제거 한뒤 다시 숫자로 바꾸어 기준 일자와 대조했다.
  • 오늘 날짜가 맞다면 정답 배열에 넣고 해당 배열의 개수를 반환했다.

답안 풀이

const soluation2 = function(day, arr) {
  let answer = 0;
  for(let x of arr) {
    if (x%10 === day) answer++;
  }
  return answer;
}

const arr1 = [25, 23, 11, 47, 53, 17, 33];
console.log(soluation(3, arr1));

const arr2 = [12, 20, 54, 30, 87, 91, 30];
console.log(soluation(0, arr2));
  • 날짜 배열을 순환시킨다. 그때 10으로 수를 나눈 나머지를 구해 일의 자리를 구한다.
  • 일의 자리와 기준일자와 비교해 해당하면 카운트를 올렸다.
  • 순환이 끝나면 카운트를 리턴한다.

나눈 나머지를 이용해 일의 자리를 쉽게 구했다. 10진수의 특징을 이용하면 쉽게 풀 수 있다는 걸 알았다.

profile
기록

0개의 댓글