문제 설명
서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다.
예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한다.
일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다.
이때, 날짜의 일의 자리 숫자가 주어지고 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성한다.
첫 줄에는 날짜의 일의 자리 숫자가 주어지고, 두 번째 줄에는 7대의 자동차 번호의 끝 두 자 리 숫자가 주어진다.
주어진 날짜와 자동차의 일의 자리 숫자를 보고 10부제를 위반하는 차량의 대수를 출력한다.
input | output |
---|---|
3, [25, 23, 11, 47, 53, 17, 33] | 3 |
0, [12, 20, 54, 30, 87, 91, 30] | 3 |
풀이
const numberOfCar = (day, nums) => {
let answer = 0;
for (let i = 0; i < nums.length; i++) {
const lastNum = String(nums[i])[1];
if (lastNum === String(day)) {
answer++;
}
}
return answer;
};
const day = 3;
const nums = [25, 23, 11, 47, 53, 17, 33];
console.log(numberOfCar(day, nums));
✍️
nums
는 숫자이므로 전역객체 String
을 사용해서 문자열로 바꾼다음 자동차 번호의 끝자리를 찾는다.day
를 String
으로 바꿔서 비교한다. String
을 쓰지 않고도 해결할 수 있는 더 간단한 방법이 있을 것 같다. 🤔solution
function solution(day, nums) {
let answer = 0;
for (let x of nums) {
if (x % 10 === day) answer++;
}
return answer;
}
console.log(solution(day, nums));
✍️ %
나머지 연산자를 사용해서 간단하게 풀 수 있다. 😀
문제 설명
reverse 함수에 정수인 숫자를 인자로 받는다. 그 숫자를 뒤집어서 return하기.
x: 숫자 return: 뒤집어진 숫자를 반환한다.
input | output |
---|---|
1234 | 4321 |
-1234 | -4321 |
1230 | 321 |
풀이
✍️ 첫 번째 풀이
const reverse = x => {
let numString = x + '';
let numReverse = numString.split('').reverse();
if(x<0){
let minus = numReverse.splice(numReverse.length-1 , 1);
let combine = minus.concat(numReverse);
let result = combine.join('');
return Number(result)
}
else{
let result = numReverse.join('');
return Number(result)
}
✍️ split
, reverse
, splice
, concat
, join
다양한 메서드를 활용해서 풀어보았다.
✍️ 두 번째 풀이
const reverse = x => {
let numString = x + ''; // 1)
let numReverse = numString.split('').reverse(); // 2)
if(numReverse[numReverse.length-1] === '-') {
numReverse.pop() // 3)
numReverse.unshift('-') // 4)
}
return Number(numReverse.join('')); // 5)
}
✍️ pop
과 unshift
를 통해서 풀어 보았다
문제 설명
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환한다.
num: 숫자 return: true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어, num = 123 return false => 뒤집은 모양이 321 이기 때문이다.
input | output |
---|---|
1221 | true |
-121 | false |
10 | false |
num = 1221 return true (=> 뒤집은 모양이 1221 이기 때문)
num = -121 return false (=> 뒤집은 모양이 121- 이기 때문)
num = 10 return false (=> 뒤집은 모양이 01 이기 때문)
풀이
const sameReverse = num => {
let numToString = num + '';
let reverseNum = numToString.split('').reverse();
if(num<0) {
let reverseResult = reverseNum.join('');
return numToString === reverseResult;
}
else {
let reverseResult = Number(reverseNum.join(''));
return num === reverseResult;
}
}
✍️ 2번 문제와 비슷한 유형이다. 😀
split
, reverse
, Number
, join
를 이용해서 풀어보았다.