반응형

https://programmers.co.kr/learn/courses/30/lessons/76501

 

코딩테스트 연습 - 음양 더하기

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re

programmers.co.kr

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

[숫자들], [Boolean들] 을 받았을 때 Boolean 배열이 true 이면 더하고 false이면 빼는 제목 그대로 음양 더하기이다.

 

reduce를 사용할까 했는데 그냥 for문을 돌렸다.

 

 

function solution(absolutes, signs) {
    let answer = 0;
    for (const index in signs) {
        if (!signs[index]) {
            absolutes[index] = absolutes[index] * -1;
        }
        answer += absolutes[index]
    }
    return answer;
}

 

 

역시나 가장 높은 추천수를 받은 답안은 reduce를 썼다.

 

function solution(absolutes, signs) {

    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
반응형
반응형

https://programmers.co.kr/learn/courses/30/lessons/70129

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

문제를 보면

 

1. 2진법으로 변환된 숫자가 String으로 제시된다.

2. 제시된 String에서 "0"을 제거한다.

3. "0"을 제거하고 남은 String의 길이를 2진법으로 변환된 String으로 바꿔준다.

4. 2진법 변환된 수가 "1" 보다 크면 계속 반복한다.

5. 0이 제거된 횟수와 제거된 0의 개수를 [횟수, 갯수] 형태로 return 한다.

 

 

내 식은 이렇다.

 

function solution(s) {
    let count = 0;
    let zeros = 0;
    while (s !== "1") {
        zeros += (s.match(/0/g) || []).length;
        s = s.replace(/0/g, "").length.toString(2);
        count++;
    }
    return [count, zeros];
}

 

아직 쌈박한 답안은 안 올라온 것 같다.

반응형
반응형

https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

문제는 이렇다.

 

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

 

 

내 식은 이랬다.

 

function solution(n) {
    let ternary = [];
    let answer = 0;
    while (n >= 1) {
        if (n > 1) {
            ternary.push(n % 3);
        } else {
            ternary.push(n);
        }
        n = parseInt(n / 3);
    }
    for (let i = 0; i < ternary.length; i++) {
        answer += ternary[i] * Math.pow(3, ternary.length - 1 - i);
    }
    return answer;
}

 

 

 

근데 다른 사람의 풀이를 보니 한 줄로 끝나더라.

 

 

 

const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

 

 

 

toString으로 3진법 수 만들어준 뒤 한글자씩 풀어서 리스트 만들고 뒤집어서 String으로 만든 뒤 다시 10진법으로..

도른자덜,,,,,,

 

 

 

 

 

 

반응형
반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

일단 피보나치 수에서 내가 쓴 함수는 이렇다.

 

 

** Javascript

 

function solution(n) {
    let a1 = 0, a2 = 1;
    let answer = [a1, a2];
    for (var i = 2; i <= n; i++) {
        answer.push((answer[i - 1] + answer[i - 2]) % 1234567);
    }
    // return answer[n] ?? 0;
    return answer[n] ? answer[n] : 0;
}

 

처음에 null 병합 연산자 이용해서 return 했는데 프로그래머스에서는 ES6가 안되는지 에러났었다.

 

그래서 answer[n] ? answer[n] : 0 으로 변경

 

 

 

** Python (2021.11.23)

 

def solution(n):
    a1 = 0
    a2 = 1
    answer = 0
    for i in range(n - 1):
        answer = a1 + a2
        a1 = a2
        a2 = answer
    return answer % 1234567

 

 

 

 

2 x n 타일링도 결국 피보나치 함수 물어보는 것이기에 이렇게 했다.

위 코드와 거의 같다.

 

function solution(n) {
    let arr = [1, 2];
    for (var i = 2; i <= n; i++) {
        arr.push((arr[i-1] + arr[i-2]) % 1000000007);
    }
    return arr[n-1] ? arr[n-1] : 0;
}

 

 

 

 

아래 식들을 이용하여 해봤는데 시간초과, 런타임에러 떠서 다 실패함.

 

 

 

 

썼던 함수들은 나중에 꺼내보려고 잠시 기록해둔다.

 

 

이건 for문 사용해서 만든 함수

function fibonacciGeneral(number) {
    let result = 0;
    let a1 = 0, a2 = 1;
    if (number <= 0) return a1;
    if (number === 1) return a2;
    for (var i = 0; i < number; i++) {
        result = a1 + a2;
        a1 = a2;
        a2 = result;
    }
    return result;
}

 

 

재귀함수 호출한 것은 이것

 

function fibonacciRecursion(n) {
    return n <= 1 ? n : fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);
}

 

 

위의 경우 77과 같은 큰 수를 넣었을 때 답이 나오지만 아래의 경우 큰 수는 계산이 오래 걸려서 답이 안 나올 수도 있음

반응형

+ Recent posts