Progrmmers Coding Test #1

김동혁·2022년 8월 17일
0

Lv1.

1.없는 숫자더하기

내 코드

function solution(numbers) {
    var answer = 45;

    for(i = 0; i < numbers.length; i++){
        answer = answer - numbers[i]
    }  
    
    return answer;
}

다른사람의 풀이

1) reduce쓰기 (reduce 공부하기!)

function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

2) 포함되지 않은 경우, 더한다.

function solution(numbers) {
    let sum = 0
    for(let i = 0 ; i < 10 ; i ++) {
        if(!numbers.includes(i)) {
            sum+=i
        }
    }
    return sum
}

※ 개인적으로 2)번이 좋은 풀이라고 생각한다.
숫자가 많으면 합을 구해야하는데 더 비효율적이지 않을까?

완주하지 못한 선수

나의풀이


function solution(participant, completion) {
    var answer = '';
    participant.sort();
    completion.sort();

    for(i = 0 ; i < participant.length ; i++){
        if(participant[i] != completion[i]){
            answer = participant[i];
            break
        }        
    }

    return answer;
}

다른사람의 풀이

1) map

var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))

2) Map

function solution(participant, completion) {
    const map = new Map();

    for(let i = 0; i < participant.length; i++) {
        let a = participant[i], 
            b = completion[i];

        map.set(a, (map.get(a) || 0) + 1);
        map.set(b, (map.get(b) || 0) - 1);
    }

    for(let [k, v] of map) {
        if(v > 0) return k;
    }

    return 'nothing';
}

※ Map, Hash 공부하기
출제의도는 Hash였다. sort도 마찬가지로 데이터가 많으면 어떻게 비교를 할지 다시한번 생각해보기.

3. 두정수 사이의 합

나의풀이

function solution(a, b) {
    var answer = 0;
    var min = Math.min(a,b);
    var max = Math.max(a,b);
    
    for (i = min; i <= max ; i++){
        answer += i 
    }
    
    return answer;
}

다른사람의 풀이

function adder(a, b){
    var result = 0
    return (a+b)*(Math.abs(b-a)+1)/2;
}

※ a와b의 관계에 절대값을 구해서 값을 구한다.
ex) 1 ~ 10까지를 더할때는 b/2(a+b) 공식을 활용할 수 있다.

0개의 댓글