1. 팩토리얼
function solution(n) {
let answer = 0;
let factorial = 1;
for (let i = 1; i <= n; i++) {
factorial *= i;
if (factorial <= n) answer = i;
}
return answer;
}
2. 숨어있는 숫자의 덧셈 (2)
function solution(my_string) {
let answer = 0;
let new_string = my_string.replace(/[A-z]/g, " ").split(" ");
for(const ns of new_string) {
answer += Number(ns);
}
return answer;
}
3. 가까운 수
function solution(array, n) {
array.sort((a, b) => Math.abs(n - a) - Math.abs(n - b) || a - b);
return array[0];
}
4. 한 번만 등장한 문자
function solution(s) {
let answer = [];
for(let i = 0; i < s.length; i++) {
if(s.split(s[i]).length <= 2) answer.push(s[i]);
}
return answer.length === 0 ? "" : answer.sort().join("");
}
5. 7의 개수
function solution(array) {
let answer = 0;
array.forEach((a) => {
answer += a.toString().split("7").length - 1;
});
return answer;
}
6. 컨트롤 제트
function solution(s) {
let answer = 0;
let arr = s.split(" ");
for(let i = 0; i < arr.length; i++) {
if(!isNaN(arr[i])) answer += Number(arr[i]);
if(arr[i] === "Z") answer -= arr[i-1];
}
return answer;
}
7. 소인수분해
- 말 그대로 소인수분해하면 되는데 굳이굳이 소수를 구하는 함수를 써버렸다..!
function isPrime(num) {
if(num === 1) return false;
for(let i = 2; i <= parseInt(Math.sqrt(num)); i++) {
if(num % i === 0) return false;
}
return true;
}
function solution(n) {
let answer = [];
for(let i = 2; i <= n; i++) {
if(n % i === 0 && isPrime(i)) answer.push(i);
}
return answer;
}
8. 이진수 더하기
function solution(bin1, bin2) {
return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);
}
9. 잘라서 배열로 저장하기
function solution(my_str, n) {
let answer = [];
for(let i = 0; i < my_str.length; i+=n) {
answer.push(my_str.slice(i, i + n));
}
return answer;
}
10. 공 던지기
function solution(numbers, k) {
let i = 0;
let count = 0;
while(count !== k - 1) {
i += 2;
count++;
}
return numbers[i % numbers.length];
}
11. 문자열 계산하기
function solution(my_string) {
return eval(my_string);
}
12. 삼각형의 완성조건 (2)
- 어렵다.. 구글링.. 참고했다..
function solution(sides) {
return Math.min(...sides) * 2 - 1;
}
// Case 1. 배열 [a, b]중 a가 가장 긴 변의 길이 인 경우
// a < b + x
// a - b < x
// Case 2. x가 가장 긴 변의 길이 인 경우
// x < a + b
// Case 1 & 2를 정리하면 아래와 같다.
// a - b < x < a + b
// a + b - (a - b) - 1
// a + b - a + b - 1
// a + b - 1
// 2 * b - 1
13. 영어가 싫어요
function solution(numbers) {
const arr = ["zero", "one", "two", "three", "four", "five",
'six', "seven", "eight", "nine"]
arr.forEach((nums, index) => {
numbers = numbers.split(nums).join(index)
})
return Number(numbers)
}
14. 구슬을 나누는 경우의 수
- 오늘 배운 조합으로 구현 !
function solution(balls, share) {
let answer = 0;
const combination = (cnt, start) => {
if(cnt === share) {
answer++;
return;
}
for(let i = start; i < balls; i++) {
combination(cnt + 1, i + 1);
}
}
combination(0, 0);
return answer;
}
15. 캐릭터의 좌표
function solution(keyinput, board) {
const answer = [0, 0];
const maxX = (board[0] - 1) / 2; // X 축 최대 이동 범위
const maxY = (board[1] - 1) / 2; // Y 축 최대 이동 범위
for (let i = 0; i < keyinput.length; i++) {
if (keyinput[i] === "right" && answer[0] < maxX) {
answer[0] += 1;
} else if (keyinput[i] === "left" && answer[0] > - maxX) {
answer[0] -= 1;
} else if (keyinput[i] === "up" && answer[1] < maxY) {
answer[1] += 1;
} else if (keyinput[i] === "down" && answer[1] > - maxY) {
answer[1] -= 1;
}
}
return answer;
}
16. 외계어 사전
function solution(spell, dic) {
const sortedSpell = spell.sort().join(''); // spell을 정렬하여 문자열로 변환
for (const word of dic) {
if (sortedSpell === [...word].sort().join('')) {
return 1;
}
}
return 2;
}
17. 종이 자르기
function solution(M, N) {
// 가로로 M개의 조각을 만들려면 M - 1번 자르기
// 세로로 N개의 조각을 만들려면 N - 1번 자르기가 필요합니다.
// 매 번 자를 때마다 조각이 1씩 늘어나므로 M × N개의 조각이 되려면 총 M × N - 1번의 가위질이 필요
return M * N - 1;
}
18. 직사각형 넓이 구하기
function solution(dots) {
// 직사각형의 가로 길이는 x 좌표 중 최댓값 - 최솟값
// 직사각형의 세로 길이는 y 좌표 중 최댓값 - 최솟값
const xValues = dots.map(dot => dot[0]); // x 좌표 목록
const yValues = dots.map(dot => dot[1]); // y 좌표 목록
const width = Math.max(...xValues) - Math.min(...xValues);
const height = Math.max(...yValues) - Math.min(...yValues);
return width * height;
}
19. 로그인 성공?
function solution(id_pw, db) {
for(const d of db) {
if(d[0] !== id_pw[0] && d[1] !== id_pw[1]) continue;
else if(d[0] === id_pw[0] && d[1] === id_pw[1]) return "login";
else if(d[0] === id_pw[0] && d[1] !== id_pw[1]) return "wrong pw"
}
return "fail";
}
20. 치킨 쿠폰
function solution(chicken) {
let coupons = chicken; // 시킨 치킨의 개수만큼 쿠폰
let serviceChicken = 0;
// 서비스 치킨 개수 = 쿠폰 / 10
// 사용한 쿠폰 개수 = 서비스 치킨 * 10
// 새로 얻은 쿠폰 개수 = 서비스 치킨
// 남은 쿠폰 = 현재 쿠폰 개수 - 사용한 쿠폰 개수 + 새로 얻은 쿠폰
while (coupons >= 10) {
let newChicken = Math.floor(coupons / 10); // 서비스 치킨 개수
serviceChicken += newChicken;
coupons = coupons % 10 + newChicken; // 남은 쿠폰 + 서비스 치킨의 쿠폰
}
return serviceChicken;
}
728x90
반응형
'LG 유플러스 유레카 SW > 과제' 카테고리의 다른 글
[과제] JS 프로그래머스 Lv.2 3문제 (25.02.20) (0) | 2025.02.20 |
---|---|
[과제] JS 프로그래머스 입문 15문제 & 머쓱이 획득 (25.02.19) (0) | 2025.02.19 |
[과제] JS 프로그래머스 입문 20문제 (25.02.17) (0) | 2025.02.17 |
[과제] JS 프로그래머스 입문 40문제 中 25문제🥲 (25.02.14-15) (0) | 2025.02.17 |
[과제] JS 프로그래머스 입문 20문제 (25.02.13) (0) | 2025.02.13 |