오랜만에 돌아온 JS 프로그래머스 문제풀이

걍걍규·2023년 6월 15일
0
post-thumbnail

요즘 저의 근황 아무도 안보지만 말해본다
구름 부트캠프 내에 계시는 코치님께서 과제를 주셔서 DB대신 localStorage로 CRUD 구현중!
중간중간 정리해서 올려볼게요오오오 문제푼거 갑니다
아 그리고 파이썬으로 문제풀다 망신당해서 일단은 자바스크립트로 풀기로 했어요..

	function solution(n) {
    let str = String(n);
    let arr = [];
    let strIndex = str.length - 1;
    while(strIndex >= 0){
        arr.push(Number(str[strIndex]));
        strIndex--;
    }
    return arr;
}

저의 풀이입니다
저는 먼저 n을 문자열로 만들어 str 변수에 담아주는거로 시작했어요!
문자열로 바꿔서 마지막 인덱스부터 하나하나 뽑아서 arr배열에 담아주기로 한것이죠?
그러면 역 순의 배열이 완성이 될테니까
하지만 다른 풀이를 보고 좌절했답니다.. 간략히 말씀을 드리자면은
일단 문자열로 된 배열을 만드는건 (n+'').split('') 수식과 함수를 이용해 간단히 만드시더군요
revers() 함수로 역순으로 바꿔준 후 map과 forEach같은 배열 전용 함수를 이용해 정수로 바꿔준 후 값을 반환 해주셨어요
저도 콘솔창에서 많이 따라해봤답니다


function solution(n) {
    return (n + '').split('').reverse().map(n => parseInt(n));
}

이런 식으로 말입죠 많이 배와갑니다

이번 문제는 주어진 수의 약수를 구한 후에 그것들을 모두 더해주는 것

function solution(n) {
    let numArr = [];
    let result = 0;
    for(let i=0; i <= n; i++){
        if(n % i == 0){
            numArr.push(i)
        }
    }
    numArr.forEach((el) => result = result+el);
    return result;
}

이렇게 풀었다가 뭔가 이상하더군요 굳이 배열을 만들어서 또 탐색을 할 필요가 있었을까 ?..

function solution(n) {
  let result = 0;
  for(let i=0; i <= n; i++){
    if(n % i == 0){
      result = result + i;
    }
  }
  return result;
}

그래서 나눠지는 약수를 찾으면 바로 result에 더해주었습니다


위문제풀이속도


아래문제풀이속도

다르네요

어려운 것 좀 풀어봤읍니다 (난어려움)

function solution(nums) {
    let canSelect = nums.length/2
    let pokemon = new Set([...nums]).size
    if(pokemon  >= canSelect){
        return canSelect;
    }else if(pokemon < canSelect){
        return pokemon;
    }
}

배열 탐색해서 문제를 풀려는데 그렇게 하면 2중으로 반복문을 써야할 것 같은 불안함이 들어 간단하게 생각해서
nums에서 중복되는 값을 제거하고 그 크기만 구할 방법을 찾다가 만난 Set!
https://ko.javascript.info/map-set
요거보고 풀었고 Set은 중복을 없애준다는 개념 보다는 중복을 아예 허용하지 않는 구조로 만들어졌다고 합니다
맵과 붙어있는 것 보니 형제인 듯 해보입니다.. 어려운 내용이 많으니 차차 이해해보겠습니다
중복되지 않아야 하는 무언가를 만들때 도움이 될 듯!?
pokemon 변수를 만들어 중복되지 않는 포켓몬의 개수를 찾아주었고
canSelect 변수를 만들어 우리가 고를 수 있는 포켓몬이 몇개인가 정해주었읍니다 주어진 포켓몬의 절반이지요?
둘을 비교하여 포켓몬의 숫자가 우리가 고를 수 있는 숫자보다
크거나 같을땐 canSelect를 그 외에 즉 우리가 고를 수 있는 숫자가 포켓몬보다 클때이죠?
고를 수 있는 숫자가 많아도 포케몬의 숫자가 작다면은 우리는 고를수가 없습니다..
그렇기에 포케몬의 숫자를 리턴해주었지요
else if 부분은 조건빼고 else로 적용해도 동일합니다
포케몬의 수가 크거나 같을 경우를 정해줬으니 그 외에는 포케몬 숫자가 작은 경우만 남겠죠!?
저희 Map, Set 많이 사용해봅시다 localStorage를 다루는 법과 유사해 보입니다 아자아자!

profile
안녕하시오?

0개의 댓글