ㅇㅇㅈ Blog

프론트엔드 수행중

0%

자동차 10부제

자동차 10부제

  • 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지

입력설명

  1. 첫 줄에는 날짜의 일의 자리 숫자가 주어짐
  2. 두 번째 줄에는 7대의 자동차 번호의 끝 두 자리 숫자가 주어짐

출력 설명

  1. 주어진 날짜와 자동차의 일의 자리 숫자를 비교하여 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]

function resultNum(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]

function resultNum(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]

function resultNum(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 도 되지만 원치 않는 것까지 모두 가져올수 있기 때문에 조심해야한다