✅ check
- index 활용:
indexOf()
,findIndex()
,find()
- sort()
- 구조 분해 할당 활용
- 메서드 활용 방법
for문
에서 길이 조건 생략하기new Set()
map()
에서 데이터 값 조건 생략하기 (map((_, i) => i + 1)
)
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.
|cipher| code| result|
|"dfjardstddetckdaccccdegk"| 4| "attack"|
|"pfqallllabwaoclk"| 2| "fallback"|
const solution = (cipher, code) => {
let answer = [];
const cipherArr = Array.from(cipher)
for(let i = code; i <= cipherArr.length; i++){
if( i % code === 0){
answer.push(cipherArr[i-1])
}
}
return answer.join('');
}
function solution(cipher, code) {
var answer = "";
// i 를 code 배수 만큼 더해서 처리
for (let i = code - 1; i < cipher.length; i += code) {
answer += cipher[i];
}
return answer;
}
function solution(cipher, code) {
// index를 code 배수로 체크해서 처리
return cipher.split('').filter((_, index) => (index + 1) % code === 0).join('');
}
정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
array | result |
---|---|
[1, 8, 3] | [8, 1] |
[9, 10, 11, 8] | [11, 2] |
const solution = (array) => {
let answer = [];
answer[0] = Math.max(...array)
array.forEach((el, i) => {
el === answer[0]? answer[1] = i : ''
} )
return answer;
}
function solution(array) {
let max = Math.max(...array);
return [max, array.indexOf(max)];
}
function solution(array) {
return [Math.max(...array), array.findIndex(el => el === Math.max(...array))];
}
📌 index 활용하기
indexOf()
: 주어진 요소의 첫 번째 index 번호 반환, 없을 경우 -1 반환
indexOf(searchElement, fromIndex)
fromIndex
: optional, 검색을 시작할 index 번호, 음수일 경우 배열 끝부터 시작( -1 = -1+array.length
)- 특정 '값'만 검색 가능
findIndex()
: 주어진 요소의 첫 번째 index 번호 반환, 없을 경우 -1 반환
- 대상이 객체이거나 특정 '값'이 아닌 조건으로 찾을 경우
indexOf()
사용 불가- 위의 경우에
findIndex()
활용!- cf.
find()
: 찾은 값 자체를 반환
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
my_string | result |
---|---|
"hi12392" | [1, 2, 2, 3, 9] |
"p2o4i8gj2" | [2, 2, 4, 8] |
"abcde0" | [0] |
const solution = (my_string) => {
let answer = [];
const numArr = Array.from(my_string).map(el => Number(el))
numArr.forEach(el => isNaN(el) ? '': answer.push(el))
return answer.sort((a, b) => a - b)
}
function solution(my_string) {
// 정규 표현식
return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
}
function solution(my_string) {
// isNaN()을 통해 숫자가 아닌 값을 걸러내고 v*1을 통해 숫자로 변환
return my_string.split("").filter((v) => !isNaN(v)).map((v) => v*1).sort((a,b) => a-b)
}
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
box | n | result |
---|---|---|
[1, 1, 1] | 1 | 1 |
[10, 8, 6] | 3 | 12 |
const solution = (box, n) => {
let a = Math.floor(box[0] / n)
let b = Math.floor(box[1] / n)
let c = Math.floor(box[2] / n)
return a* b* c
}
function solution(box, n) {
// 구조 분해 할당으로 좀 더 명시적으로 표현
let [width, length, height] = box;
return Math.floor(width / n) * Math.floor(length / n) * Math.floor(height / n);
}
function solution(box, n) {
// reduce로 간결하게 표현
return box.reduce((acc,v) => acc * Math.floor(v / n), 1);
}
문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
my_string | num1 | num2 | result |
---|---|---|---|
"hello" | 1 | 2 | "hlelo" |
"I love you" | 3 | 6 | "I l veoyou" |
const solution = (my_string, num1, num2) => {
const str = my_string.split('')
const first = str[num1]
const second = str[num2]
str[num1] = second;
str[num2] = first;
return str.join('')
}
function solution(my_string, num1, num2) {
my_string = my_string.split('');
// 구조 분해 할당으로 한번에 요소 교체
[my_string[num1], my_string[num2]] = [my_string[num2], my_string[num1]];
return my_string.join('');
}
정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
n | result |
---|---|
24 | [1, 2, 3, 4, 6, 8, 12, 24] |
29 | [1, 29] |
const solution = (n) => {
let answer = [];
for(let i = 1; i <= n; i ++){
if( n % i === 0){
answer.push(i)
}
}
return answer;
}
function solution(n) {
return Array(n).fill(0).map((v, index) => v+index+1).filter((v) => n%v===0);
}
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
numbers | direction | result |
---|---|---|
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
const solution =(numbers, direction) => {
if ( direction === 'right') {
numbers.unshift(numbers[numbers.length - 1])
numbers.pop()
}
if ( direction === 'left') {
numbers.push(numbers[0])
numbers.shift(numbers[0])
}
return numbers
}
function solution(numbers, direction) {
// numbers.unshift(numbers.pop()): pop으로 요소를 제거하고, 이 요소를 unshift 한다.
// numbers.push(numbers.shift()): shift로 요소를 제거하고, 이 요소를 push 한다.
direction === 'right' ? numbers.unshift(numbers.pop()) : numbers.push(numbers.shift());
return numbers;
}
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
age | result |
---|---|
23 | "cd" |
51 | "fb" |
100 | "baa" |
const solution = (age) => {
const arr = ['a', 'b', 'c', 'd', 'e', "f", "g", 'h', 'i', 'j'];
const numArr = Array.from(age.toString())
let result = [];
numArr.map((el) => result.push(arr[Number(el)]))
return result.join('');
}
function solution(age) {
return age
.toString()
.split("")
.map((v) => "abcdefghij"[v])
.join("");
}
map 안에서 직접 문자열을 사용하기 때문에, 임시 배열을 사용하지 않고 결과적으로 메모리를 덜 사용하고 간결한 코드
머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.
n | result |
---|---|
6 | 1 |
10 | 5 |
4 | 2 |
const solution = (n) => {
const pieces = 6;
for( let i = 1; i<= 100; i ++){
if( pieces * i % n === 0){
return i;
}
}
}
const solution = (n) => {
const pieces = 6;
// for문 3가지 중 필요없는 없는 조건 ( 길이)는 ; ; 로 생략 가능
for( let i = 1; ;i ++){
if( pieces * i % n === 0){
return i;
}
}
}
📌 for문 3가지 중 필요없는 없는 조건 ( 길이)는 ; ; 로 생략 가능
머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.
order | result |
---|---|
3 | 1 |
29423 | 2 |
const solution = (order) => {
const orderArr = Array.from(order.toString());
orderArr.map(el => Number(el));
let clap = [];
// 10, 100 등 '0' 의 경우 생각해야함
orderArr.forEach(el => {
if(el !== '0' && el % 3 === 0){
clap.push(el)
}
});
return clap.length;
}
function solution(order) {
const mySet = new Set([3,6,9]);
return String(order).split('')
.filter(num => mySet.has(Number(num)))
.length;
}
📌
new set()
: 중복을 허용하지 않는 Collection, 동일한 값은 1개만 저장, 대소문자 구분
Set.add(value)
: 요소 추가const nums = new Set([1, 2, 3]); nums.add(4); // set(4) {1, 2, 3, 4}
Set.delete(value)
: 요소 삭제nums.delete(1); // set(3) {2, 3, 4}
Set.has(value)
: 요소 존재 여부 확인nums.has(3) // true nums.has(1) // false
Set.size
: 요소 갯수 확인console.log(nums.size); // 3
Set.clear(value)
: 요소 전체 삭제nums.clear() // set(0) {}
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
n | result |
---|---|
10 | 5 |
15 | 8 |
const solution = (n) => {
const result = [];
const divider =[2,3,5,7];
for(let i = 1; i <= n; i ++){
for(let j = 0; j < divider.length; j ++){
if(i !== divider[j] && i% divider[j] === 0){
result.push(i)
}
}
}
const answer = new Set(result)
return answer.size;
}
function solution(n) {
return Array(n)
.fill()
// .map((_, i) => i + 1)은 데이터 값은 확인하지 않고, 데이터가 몇번째 데이터인지만 확인한다는 뜻
.map((_, i) => i + 1)
.filter((i) => {
let cnt = 0;
for (let j = 1; j <= i; j++) {
if (i % j === 0) cnt++;
}
return cnt >= 3;
}).length;
}
📌
map((_, i) => i + 1)
_
: 데이터의 값은 확인하지 않고, 데이터가 몇 번째 데이터인지만 확인한다.