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

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ array의 원소 ≤ 100
  • 1 ≤ n ≤ 100
  • 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.

▶ 내가 푼 방식

function solution(array, n) {
    var difference = [];
    array.sort()
    array.map(value => difference.push(Math.abs(n-value)))
    const min = Math.min(...difference)
    return array[difference.indexOf(min)];
}

 

 다른 유저가 푼 방식

// 유저 1
function solution(array, n) {
    array.sort((a,b) => Math.abs(n - a) - Math.abs(n - b) || a - b);

    return array[0];
}

 

 배운 것들

     -  sort 를 새로운 방식으로 정렬

     - 

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

문자열 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('');
}

 

 배운 것들

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

   

오버로딩

  • TypeScript 에 있는 메서드 중 하나로 선언한 타입은 다르지만 같은 함수 명으로 사용할 수 있게 해주는 기능
  • 각 경우에 대해 새 함수를 만들 필요 없이 입력 인수에 따라 함수의 다른 구현을 제공하려는 경우에 특히 유용

 

예시

Interface User{
    id : number;
    name: string;
    age: number;
}

Interface UserQuery{
    id : number;
    name?: string;
    age?: number;
}


function findPerson(name: string): Person[];
function findPerson(age: number): Person[];
function findperson(userQuery: UserQuery) : Person;
function findPerson(query: string | number| UserQuery): Person[]| Person[]|Person {
  if (typeof query === "string") {
    // search by name
    return [{ id: 1, name: query, age: 30 },{ id: 10, name: query, age: 20 },...];
  } 
  if (typeof query === "number") {
    // search by age
    return [{ id: 15, name: "Alice", age: query }, { id: 3, name: "Bob", age: query }];
  }
  if (typeof query === "UserQuery"){
    // search by id with name or age
    return {id: queay, name: "Joey", age:30}
  }
}

 

 

 

참고자료

https://medium.com/@bobjunior542/master-function-overloading-in-typescript-with-these-simple-tips-169bea017aa4

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

숫자와 "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() 을 이용하여 변수 설정하기

+ Recent posts