문제(출처: 프로그래머스)

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ my_string ≤ 110
  • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
  • 대문자와 소문자를 구분합니다.
  • 공백(" ")도 하나의 문자로 구분합니다.
  • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

▶ 내가 푼 방식

function solution(my_string) {
    var answer = '';
    const new_my_string = new Set([...my_string])
    for(let i of new_my_string){
        answer += i
    }
    return answer;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(my_string) {
    return [...new Set(my_string)].join('');
}

 

 배운 것들

     -  너무 간단하게 풀 수 있다..

   

문제(출처: 프로그래머스)

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

<제한 사항>

* 1 ≤ s의 길이 ≤ 200
* -1,000 < s의 원소 중 숫자 < 1,000
* s는 숫자, "Z", 공백으로 이루어져 있습니다.
* s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
* 연속된 공백은 주어지지 않습니다.
* 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
* s는 "Z"로 시작하지 않습니다.
* s의 시작과 끝에는 공백이 없습니다.
* "Z"가 연속해서 나오는 경우는 없습니다.

 

▶ 내가 푼 방식

function solution(s) {
    let inputs = s.split(' ');
    for (let i = 0; i < inputs.length; i++){
        if ( inputs[i] === "Z"){
            delete inputs[i];
            delete inputs[i-1];
        }
    }
    const anwer = inputs.filter((input) => input !== null)
    return anwer.reduce((a,b) =>parseInt(a) + parseInt(b) ,0);
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(s) {
    const stack = []

    s.split(' ').forEach((target) => {
        if(target === 'Z') stack.pop();
        else stack.push(+target)
    })

    return stack.length ? stack.reduce((pre, cur) => pre + cur) : 0;
}

 

 배운 것들

     -  stack 개념으로 'Z' 가 나타나면 이전에 저장된 것을 pop 하면 간단하다.

     - +"1" 로 하면 숫자 1로 저장된다.

문제(출처: 프로그래머스)

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n 이 매개변수로 주어질 때  n 의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
 2 ≤  n ≤ 10,000

 

▶ 내가 푼 방식

function solution(num) {
    result = new Set();

    for (let i = 2; i <= num; i++) {
        while( num %i === 0){
            result.add(i);
            num /= i;
        }
    }
    return [...result]
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(n) {
    let answer = []

    let i = 2;
    while (i <= n) {
      if (n % i === 0) {
        answer.push(i)     
        n = n / i
      } else {
      i++        
      }
    }

    return [...new Set(answer.sort((a, b) => a > b ? 1 : -1))]
}

 

 배운 것들

     -  처음 작성했던 코드는 252를 입력했을 때 6을 반환했는데 이부분을 생각하지 못했다.

     -  new Set() 을 이용하여 변수 설정하기

문제(출처: 프로그래머스)

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

 

▶ 내가 푼 방식

function solution(n) {
    let answer = 0
    for(let i =0; i <=n; i ++){
        let cnt = 0
        for(let j =0; j<=i; j++){
            if (i%j==0){
                cnt +=1
            }
        }
        if(cnt >2){
            answer += 1       
        }
    }

    return answer;
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(n) {
    let dp = new Array(n+1).fill(1)
    for(let i = 2 ; i <= n ; i++){
        if(dp[i]){
            for(let j = 2 ; i*j <= n ; j++){
                dp[i*j] = 0
            }
        }
    }

    return dp.filter(el => el === 0).length
}

 

문제(출처: 프로그래머스)

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다.
정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
조건:  i! ≤ n

 

▶ 내가 푼 방식

function solution(n) {
    let factorial = 1;
    let i = 0;
    while (factorial <= n){
        i++
        factorial *= i;
    }
    return i-1;
}

 

 다른 유저가 푼 방식


// 웹사이트 : https://ko.javascript.info/task/factorial
function factorial(n) {
  return (n != 1) ? n * factorial(n - 1) : 1;
}

 

 배운 것들

     - 

     - 

+ Recent posts