코딩테스트 14일차
가까운 수
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
function solution(array, n) {
array.sort(function(a, b) {
return a - b;
});
var left = 0;
var right = array.length - 1;
var closest = array[left];
while (left <= right) {
var mid = Math.floor((left + right) / 2);
var current = array[mid];
if (current === n) {
return current;
}
if (Math.abs(n - current) < Math.abs(n - closest)) {
closest = current;
}
if (current < n) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return closest;
}
✅풀이
배열 array를 순회하면서 현재 정수와 n과의 차이가 현재까지 가장 작은 차이인 closest와의 차이보다 작은 경우 closest를 업데이트합니다. 순회가 완료된 후 closest를 반환합니다.
369게임
머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
function solution(order) {
var answer = 0;
var count = 0;
var str = order.toString();
for (var i = 0; i < str.length; i++) {
var digit = parseInt(str[i]);
if (digit === 3 || digit === 6 || digit === 9) {
count++;
}
}
answer = count;
return answer;
}
✅풀이
숫자 order를 문자열로 변환하고, 문자열을 순회하면서 3, 6, 9에 해당하는 숫자의 개수를 세는 로직으로 구현되었습니다.
주어진 코드에서는 입력된 숫자 order를 문자열로 변환한 후, 문자열을 순회하면서 각 자리 숫자를 확인합니다. 만약 현재 자리 숫자가 3, 6, 9에 해당한다면 count를 증가시킵니다. 순회가 완료된 후 count 값을 answer에 대입하고 반환합니다.
이 코드의 문제는 주어진 order가 숫자 하나만 주어지는 것을 가정하고 작성되었기 때문에, 1부터 order까지의 범위에서 3, 6, 9에 해당하는 숫자의 개수를 구하는 것이 아닌, 주어진 숫자에 포함된 3, 6, 9의 개수를 구하는 로직입니다.
암호 해독
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
function solution(cipher, code) {
var answer = '';
for (var i = code - 1; i < cipher.length; i += code) {
answer += cipher[i];
}
return answer;
}
✅풀이
cipher 문자열을 순회하면서 code의 배수 번째 글자를 추출하여 answer에 추가하는 로직입니다. 초기값 i를 code - 1로 설정하여 code의 배수 번째 글자부터 시작하고, i를 code씩 증가시켜 cipher 문자열을 순회합니다. 각 반복에서 cipher[i]를 answer에 추가합니다.
대문자와 소문자
function solution(my_string) {
var answer = '';
for (var i = 0; i < my_string.length; i++) {
var char = my_string[i];
if (char >= 'A' && char <= 'Z') {
answer += char.toLowerCase();
} else if (char >= 'a' && char <= 'z') {
answer += char.toUpperCase();
} else {
answer += char;
}
}
return answer;
}
✅풀이
my_string 문자열을 순회하면서 각 문자를 확인합니다. 만약 문자가 대문자인 경우 toLowerCase() 함수를 사용하여 소문자로 변환하여 answer에 추가합니다. 반대로, 문자가 소문자인 경우 toUpperCase() 함수를 사용하여 대문자로 변환하여 answer에 추가합니다. 순회가 완료되면 최종적인 answer를 반환합니다.