프로그래머스 코딩테스트
문제 1.가까운 수
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
function solution(array, n) {
if (array.length === 0) {
return null;
}
let answer = array[0];
let temp = Math.abs(array[0] - n);
for (let i = 1; i < array.length; i++) {
let diff = Math.abs(array[i] - n);
if (diff < temp || (diff === temp && array[i] < answer)) {
temp = diff;
answer = array[i];
}
}
return answer;
}
설명: 나는 절댓값을 이용하기로 했다. Math.abs()를 사용하면 절댓값을 반환한다. 이 절댓값을 비교하였고 혹여 절댓값이 같으면 더 작은 수를 answer에 넣도록 짰다.
문제 2. k의 개수
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
function solution(i, j, k) {
var answer = 0;
let Arr = []
for (let a=i; a<=j; a++){
Arr.push(a.toString().split('').map(Number));
}
answer = Arr.flat().filter(num => num === k).length;
return answer;
}
설명:
문제 3. 한 번만 등장한 문자
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
function solution(s) {
let answer = {};
for (let char of s) {
answer[char] = (answer[char] || 0) + 1;
}
let uniqueChars = [];
for (let char in answer) {
if (answer[char] === 1) {
uniqueChars.push(char);
}
}
return uniqueChars.sort().join('');
}
설명: for문을 사용해서 각 문자별 카운트를 셀 수 있도록 했다.
문제 4 - 7의 개수
머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
function solution(array) {
var answer = 0;
let result = [];
array.forEach(num => {
let digits = Array.from(String(num), Number);
result.push(...digits);
});
for (let i of result){
if(i === 7){
answer++;
}
}
return answer;
}
설명: 일단 forEach를 사용해서 array의 내용물을 모두 분해시켜준다. [7, 17, 77] 이라는 배열이 있으면 [7, 1, 7, 7, 7]로 바꿔준다는 말이다. 이후 for문을 돌려서 해당 요소가 7일 때마다 answer을 1씩 증가시켰다.
문제 5 - 이진수 더하기
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
function solution(bin1, bin2) {
var answer = '';
let carry = 0;
while (bin1.length || bin2.length || carry) {
const sum = Number(bin1.slice(-1) || 0) + Number(bin2.slice(-1) || 0) + carry;
answer = (sum % 2) + answer;
carry = sum > 1 ? 1 : 0;
bin1 = bin1.slice(0, -1);
bin2 = bin2.slice(0, -1);
}
return answer;
}
설명: