Winnie The Pooh Bear 코딩테스트 입문

코딩테스트

코딩테스트 입문

코딩은 처음이라 2023. 6. 2. 19:31

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

프로그래머스 (programmers.co.kr)

 

코딩 테스트 입문

 

소인수분해 

문제 설명

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

제한 사항

  • 2 ≤ n ≤ 10,000

입출력 예

n result
12 [2,3]
17 [17]
420 [2,3,5,7]

입출력 예 설명

  • 12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.
  • 17은 소수입니다. 따라서 [17]을 return 해야 합니다.
  • 420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.

출력

function solution(n) {
    var answer = [];

    for (var i = 2; i <= n; i++) {
        while (n % i === 0) {
            if (answer[answer.length - 1] !== i) { // 이전에 추가한 소인수와 같지 않은 경우에만 추가
                answer.push(i);
            }
            n /= i;
        }
    }

    return answer;
}

soultion 함수의 인자로 주어진 수 n을 받고

answer라는 빈 배열을 초기화, 이 배열은 소인수를 저장할 목적으로 사용되고 for문을 사용해 i를 2부터 n까지 증가시키면서 소인수를 찾습니다ㅏ. while 반복문을 사용해 n을 i로 나눌 수 있는지 확인하고, n을 i로 나눌 수 있다면 while문이 실행됩니다. n을 i로 나눈 후, n의 값을 갱신하고 이는 소인수를 찾은 부분을 제외한 나머지를 처리하기 위한 과정입니ㅏㄷ.

 while 문은 더 이상 실행되지 않을 때까지 4~6 단계를 반복합니다. 이렇게 하면 n은 더 이상 소인수로 나눌 수 없는 상태가 되고 for문을 통해 모든 소인수를 찾았을 때 answer 배열에는 소인수들이 오름차순으로 저장되어 있습니다.

answer배열을 반환하고 함수가 종료됩니다.

 

 

 

 

컨트롤 제트

문제 설명

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

제한 사항

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

입출력 예

s result
"1 2 Z 3" 4
"10 20 30 40" 100
"10 Z 20 Z 1" 1
"10 Z 20 Z" 0
"-1 -2 -3 Z" -3

입출력 예 설명

  • 10 + 20 + 30 + 40 = 100을 return 합니다.
  • "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.

출력

function solution(s) {
    var answer = 0;
    var numbers = s.split(" ");

    for (var i = 0; i < numbers.length; i++) {
        if (numbers[i] === "Z") {
            answer -= parseInt(numbers[i - 1]);
        } else {
            answer += parseInt(numbers[i]);
        }
    }

    return answer;
}

answer 를 0 으로 초기화 하고 이 변수는 숫자들의 합을 저장합니다. 

문자열 s를 공백을 기준으로 분리하여 숫자 배열 numbers로 저장합니다. 

numbers 배열을 순회하면서 각 요소를 확인합니다.

현재 요소가 "Z"인 경우, 바로 이전 숫자를 answer에서 뺍니다.

현재 요소가 숫자인 경우, 해당 숫자를 answer 에 더합니다.

모든 요소를 처리한 후 answer값을 반환합니다.

 

 

 

 

 

중복된 문자 제거

문제 설명

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

제한 사항

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

입출력 예

my_string result
"people" "peol"
"We are the world" "We arthwold"

입출력 예 설명

  • "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.
  • "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.

출력

function solution(my_string) {
    var answer = '';
    var seen = new Set();
    
    for (var i = 0; i < my_string.length; i++) {
        var char = my_string[i];
        if (!seen.has(char)) {
            seen.add(char);
            answer += char;
        }
    }
    
    return answer;
}

Set 자료 구조를 활용해 중복된 문자를 체크하고 문자열을 순회하면서 각 문자가 이미 seenSet에 있는지 확인한 후, 처음 등장하는 문자이인 경우에만  seen Set 에 추가하고 결과 문자열 에도 추가합니다.

반응형