문제
- 서울시는 교통 혼잡을 막기 위해서 차량 10부제를 시행합니다.
- 차량 10부제는 자동차 번호 일의 자리가 해당 날짜의 일의 자리와 일치하는 경우 운행을 금지하는 것입니다.
- 일의 자리가 0인경우 10, 20, 30일에 운행하지 못합니다.
- 첫 줄에는 날짜의 일의 자리가 주어지고 두 번째 줄에는 7대의 자동차 번호의 끝 두 자리 숫자가 주어집니다.
- 주어진 날짜와 자동차 일의 자리 숫자를 보고 10부제를 위반하는 차량 대수를 출력하세요.
처음 푼 방법
function solution(day, arr) {
let count = 0;
for (i = 0; i < 7; i++) {
if (arr[i].toString().includes(day)) {
count++;
};
}
return count;
}
console.log(solution(3, [25, 23, 11, 47, 53, 17, 33]));
고친 방법
function solution(day, arr) {
let count = 0;
for (i = 0; i < 7; i++) {
if (arr[i] % 10 === day) {
count++;
};
}
return count;
}
console.log(solution(3, [25, 23, 11, 47, 53, 17, 33]));
느낀 점
- 먼저 입력으로 날짜와, 자동차 번호 7개를 받아야 하기 때문에 함수에
day
와 arr
로 나누었습니다.
count
는 위반 누적 대수를 추가해야 하기 때문에 count = 0
으로 기본 값을 ‘숫자 0’으로 설정했습니다.
- 누적 위반 대수를 계산하기 위한 방법으로 배열에 for문을 사용해서 반복적으로 값을 출력하게 했습니다.
- 그리고
includes
를 사용해서 날짜와 일치하는 값이 있는 경우 count
를 추가하도록 했습니다.
- 배열에서 날짜(day)와 일치하는 값을 찾을 때
array.filter()
나 array.find()
함수를 쓸 수도 있는데 filter()
를 쓰지 않은 이유는 새로 배열을 return해서 길이를 계산하는 것보다 for문에서 간단하게 계산하고 바로 count에 결과 값을 반영하는 게 좋을 것 같다고 생각해서 입니다.
- 그런데 처음에 잘못 생각한 부분이 있어서 오류가 발생했습니다.
- 예시에 있는 값으로 입력하면 정답 3이 제대로 나오는데, 결과 값이 나와야 하는 값과 다르게 출력되는 경우가 있었습니다.
- 그 이유는 includes를 사용했기 때문입니다.
- 일의 자리와 날짜가 일치할 경우만 위반 대상인데, 십의 자리가 일치하는 경우에도 count되는 것입니다.
- 그래서 다시 고친 방법으로는 자동차 번호를 10으로 나눈 후 나머지 숫자가 일의 자리가 된다는 점을 활용해서
arr[i]%10 === day
로 조건문을 작성하여 수정했습니다.
- 집중이 안되는 환경에서 문제를 풀어서 그런지 푸는데 18분 정도 걸렸는데도 실수가 있어서 다음에는 조금 더 집중할 수 있는 환경에서 문제를 풀어야 겠다고 느꼈고,
- 문제 분석이 잘못되어서 오류가 난 부분이 있는 만큼, 다음번부터는 문제 분석을 더 확실히 해야겠다고 느꼈습니다.
그 외
- 글 쓰다가 모든 내용이 날아가서 처음부터 다시 작성했습니다.😢
Comments