[알고리즘] 10부제 (부제: Get the Last Digit of Number)

Perfume·2022년 4월 22일
0

Algorithm

목록 보기
2/11
post-thumbnail
post-custom-banner

인프런에서 자바스크립트 알고리즘 강의를 샀다. 강의자료로 먼저 내 나름의 방식대로 풀어본 다음 강의를 보는 방식으로 스터디를 해보려고 한다.

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

받는 값은 다음과 같다.

3 - 날짜의 일의 자리 숫자
25 23 11 47 53 17 33 - 자동차 번호 끝 두 자리

처음엔 배열을 arr.map(String)을 이용해 string으로 변환해준 다음, slice로 끝자리를 잘라서 확인하는 방법을 쓰려고 했다. 그런데 이 방식이 별로인 거 같아서 구글링을 해보다가 다음과 같은 코드를 발견했다.

last_digit = number % 10;

➡️ 참고한 글 링크

왜 10으로 나누면 끝자리를 알 수 있는 건지 궁금했는데 모든 수는 10으로 나누면 그 숫자의 1의 자리 숫자가 나머지가 된다고 한다. (그리고 그 앞의 숫자는 몫이 된다)

e.g) 32를 10으로 나누면 몫은 3, 나머지는 2
328을 10으로 나누면 몫은 32, 나머지는 8

그래서 최종 코드는 다음과 같다.


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

for of를 사용하는 이유도 궁금해서 찾아봤는데, for-in이 객체의 속성들을 순회하기 위한 구문이라면 for-of문은 배열의 요소들, 즉 data를 순회하기 위한 구문이라고 한다. 아래 MDN의 예시를 보면 둘의 차이를 분명히 알 수 있다.

Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};

let iterable = [3, 5, 7];
iterable.foo = "hello";

for (let i in iterable) {
  console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}
profile
공부하는 즐거움
post-custom-banner

0개의 댓글