자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지
입력설명
첫 줄에는 날짜의 일의 자리 숫자가 주어짐
두 번째 줄에는 7대의 자동차 번호의 끝 두 자리 숫자가 주어짐
출력 설명
주어진 날짜와 자동차의 일의 자리 숫자를 비교하여 10부제를 위반하는 차량의 대수를 출력
제일 처음 작성 했던 코드
1 2 3 4 5 6 7 8 9 10 11 12 13
let dayNum = 2; let carNum = [12,20,54,30,87,91,30]
functionresultNum(day){ let result = []; carNum.forEach(num => { let x = num.toString() if(x.includes(day)){ result.push(x) } }) console.log(result.length) }
문제점
includes로 비교하니 일의 자리 숫자만 아니라 십의 자리 숫자도 걸려서 출력 된다.
배열안에는 숫자데이터라 비교할려면 toString()도 해줘야 한다
두번째 코드
1 2 3 4 5 6 7 8 9 10 11 12
let dayNum = 2; let carNum = [12,20,54,30,87,91,30]
functionresultNum(day){ let result = 0; for(let i=0; i < carNum.length; i++){ if(carNum[i] % 10 === day){ result++; } } console.log(result) }
10부제니 자동차번호를 10으로 나누어 남는 몫이 자동차번호 일의 자리 숫자이다
for 반복문으로 배열을 돌면서 하나씩 날짜와 비교한다
만약 자동차번호를 10으로 나눈 값이 인자로 받은 day 값과 일치하면 result를 증가 시켜준다.
사실 그렇게 어렵지 않은 로직이지만.. 문제를 정확히 파악하는게 중요하다
세번째 코드
정답 코드를 보니 배열을 순회(?)하는 for문을 더 간단히 작성할 수 있다
1 2 3 4 5 6 7 8 9 10 11 12
let dayNum = 2; let carNum = [12,20,54,30,87,91,30]
functionresultNum(day){ let result = 0; for(num of carNum){ if(num%10 === day){ result++; } } console.log(result) }
for ..of 와 for ..in의 차이점
for ..of는 배열을 순회하며 탐색한다
for ..in은 객체를 순회하며 탐색한다
배열은 객체에 포함 되기 때문에 for ..in 도 되지만 원치 않는 것까지 모두 가져올수 있기 때문에 조심해야한다