중복을 허용하지 않는 Set을 이용하여 해결
function solution(str) {
return Array.from(new Set(str)).join("");
}
console.log(solution("ksekkset"));
입력 받은 str을 배열화 시킨 후
배열의 길이가 1이 넘으며 pop 반환값과 shift 반환값이 일치하지 않으면 NO를 출력하고
그렇지 않으면 YES를 출력하여 해결
let str = "yeeeeeeeeeeeeeeey";
function solution(str) {
let arr = str.split("");
while (arr.length > 1) {
if (arr.pop().toUpperCase() !== arr.shift().toUpperCase()) {
return "NO";
}
}
return "YES";
}
console.log(solution(str));
map 함수를 이용하여 뒤집힌 자연수로 이루어진 배열 생성
filter 함수를 이용하여 소수판별식을 통해 answer배열 생성
answer 반환하여 해결
let nums = [32, 55, 62, 20, 250, 370, 200, 30, 100, 0];
function solution(nums) {
let arr = nums.map((n) => {
return parseInt(n.toString().split("").reverse().join(""));
});
let answer = arr.filter((n) => {
if (n === 1 || n === 0) {
return false;
} else if (n === 2) {
return true;
}
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
});
return answer;
}
console.log(solution(nums));
입력받은 str을 배열화 시킨 후
"("를 카운트하는 변수와 ")"를 카운트하는 변수 생성
배열을 돌리며 "(",")"카운트가 0일때
배열안의 값이 "("이면 카운트를 올리고 그렇지 않으면 정답배열에 해당 값 추가
다시 돌리며 만약 "(",")"카운트가 0이 아니면서 같을때
배열안의 값을 정답배열에 추가 후 카운트 초기화
다시돌리며 만약 "(",")"카운트가 0이 아니며, 같지 않을때
배열안의 값이 ")"이라면 ")"카운트를 올리고
그렇지 않고 "("이면 "("카운트를 올린다
최종으로 answer 배열의 값들을 join하여 반환한다
let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
function solution(str) {
let answer = [];
let cnt1 = 0;
let cnt2 = 0;
str.split("").forEach((s) => {
if (cnt1 === 0 && cnt2 === 0) {
if (s === "(") {
cnt1 += 1;
} else {
answer.push(s);
}
} else if (cnt1 === cnt2) {
answer.push(s);
cnt1 = 0;
cnt2 = 0;
} else if (cnt1 !== 0) {
if (s === ")") {
cnt2 += 1;
} else if (s === "(") {
cnt1 += 1;
}
}
});
return answer.join("");
}
console.log(solution(str));
재귀함수의 재귀 구문에 n의 몫을 재귀로 받는 함수에 n의 나머지를 문자열로 변환하여 합치는 구문 작성
종료되면 ''반환
let n = 95;
function solution(n) {
// 종료 구문
if (n === 0) {
return "";
}
// 재귀 구문
return solution(parseInt(n / 2)) + String(n % 2);
}
console.log(solution(n));
str를 배열화 시켜
filter함수로 돌리며 값이 대문자화한 값과 같은지 확인하여 배열생성
배열의 길이 출력
let str = "KoreaTimeGood";
function solution(str) {
return str.split("").filter((e) => e === e.toUpperCase()).length;
}
console.log(solution(str));
str를 배열화 시켜 map함수로 돌리며
삼항연산자를 통해 값이 값을 대문자화한 값과 같다면 소문자화 시키고
그렇지 않다면 대문자화 시켜 반환
let str = "gattBG";
function solution(str) {
return str
.split("")
.map((e) => (e === e.toUpperCase() ? e.toLowerCase() : e.toUpperCase()))
.join("");
}
console.log(solution(str));
가위바위보가 숫자화되어 있다는 점을 이용하여
상대가 될 B의 1: 가위에 3을 추가한 뒤
forEach함수를 이용하여 A값과 B값을 비교하여
A값보다 B값이 1 클 때 B를 반환
같을 때 D 반환
그렇지 않으면 A 반환
function solution(aNum, bNum) {
let answer = [];
let rival = bNum.map((e) => (e === 1 ? e + 3 : e));
aNum.forEach((e, i) => {
if (e + 1 === rival[i]) {
answer.push("B");
} else if (e === rival[i]) {
answer.push("D");
} else {
answer.push("A");
}
});
return answer;
}
console.log(solution([2, 3, 3, 1, 3], [1, 1, 2, 2, 3]));
map함수와 reduce함수를 이용하여 행과 열의 합을구하고
reduce함수로 대각선의 값을 구한 뒤
최대값 반환
let nums = [
[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19],
];
function solution(nums) {
const row = nums.map((e) => e.reduce((acc, current) => acc + current));
const column = nums.map((e, i) =>
nums.reduce((acc, current) => acc + current[i], 0)
);
const s = nums.reduce((acc, current, i) => acc + current[i], 0);
const sr = nums.reverse().reduce((acc, current, i) => acc + current[i], 0);
return Math.max(...row, ...column, s, sr);
}
console.log(solution(nums));
객체를 이용하여 중복되는 문자의 갯수를 카운트한 후
정답배열에 1을 제외하고 모든 문자와 숫자 추가 후 join
let str = "KKHSSSSSSSE";
function solution(str) {
let answer = [];
let obj = {};
str.split("").forEach((e) => (obj[e] ? (obj[e] += 1) : (obj[e] = 1)));
for (let i in obj) {
answer.push(i);
if (obj[i] !== 1) {
answer.push(`${obj[i]}`);
}
}
return answer.join("");
}
console.log(solution(str));
리그형식으로 학생들을 모두 짝지은 후
시험의 횟수와 짝지은 값들의 중복 값이 같으면 정답 카운트를 올린다
let nums = [
[3, 4, 1, 2],
[4, 3, 2, 1],
[3, 1, 4, 2],
];
function solution(nums) {
let pair = nums.map((nl) => {
let arr = [];
let index = 0;
while (index < nl.length - 1) {
for (let j = index + 1; j < nl.length; j++) {
arr.push(`${nl[index]}${nl[j]}`);
}
index++;
}
return arr;
});
let mentoList = pair.flat().reduce((acc, current) => {
acc[current] = (acc[current] || 0) + 1;
return acc;
}, {});
return Object.values(mentoList).filter((e) => nums.length === e).length;
}
console.log(solution(nums));
캐시배열에 캐시 길이만큼의 0을 채움
추가되는 메모리값들을 forEach함수로 돌며
캐시배열에 메모리값이 없으면 캐시에서 pop하고 메모리값을 추가
메모리값이 있으면 해당 메모리값을 지운뒤, unshift로 앞에 추가
let nums = [1, 2, 3, 2, 6, 2, 3, 5, 7];
let n = 5;
function solution(nums, n) {
let cache = new Array(n).fill(0);
nums.forEach((e) =>
!cache.includes(e)
? (cache.pop(), cache.unshift(e))
: (cache.splice(cache.indexOf(e), 1), cache.unshift(e))
);
return cache;
}
console.log(solution(nums, n));