[과제] JS 프로그래머스 입문 20문제 (25.02.18)

2025. 2. 18. 17:31·LG 유플러스 유레카 SW/과제

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
'LG 유플러스 유레카 SW/과제' 카테고리의 다른 글
  • [과제] JS 프로그래머스 Lv.2 3문제 (25.02.20)
  • [과제] JS 프로그래머스 입문 15문제 & 머쓱이 획득 (25.02.19)
  • [과제] JS 프로그래머스 입문 20문제 (25.02.17)
  • [과제] JS 프로그래머스 입문 40문제 中 25문제🥲 (25.02.14-15)
nueos
nueos
nueos 공부 기록nueos 님의 블로그입니다.
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    디지랩챌린지
    기술로바꾸는세상
    완전 탐색
    제주지역혁신플랫폼지능형서비스사업단
    제주해커톤
    Queue
    heap
    Stack
    디지털혁신
    힙
    exhaustive search
    큐
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[과제] JS 프로그래머스 입문 20문제 (25.02.18)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.