Winnie The Pooh Bear 코딩 테스트 입문

코딩테스트

코딩 테스트 입문

코딩은 처음이라 2023. 6. 6. 10:12

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

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

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

코딩 테스트 입문

 

 

 

 

A로 B만들기

문제설명

문자열 before after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

제한사항

문자열 before after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

입출력예

before after result
"olleh" "hello" 1
"allpe" "apple" 0

입출력예설명

  • "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다.
  • "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다.

출력

function solution(before, after) {
    var sortedBefore = before.split('').sort().join(''); // before 문자열을 알파벳 순으로 정렬합니다.
    var sortedAfter = after.split('').sort().join(''); // after 문자열을 알파벳 순으로 정렬합니다.

    if (sortedBefore === sortedAfter) {
        return 1; // before를 정렬한 결과와 after를 정렬한 결과가 동일하면 1을 반환합니다.
    } else {
        return 0; // 그렇지 않으면 0을 반환합니다.
    }
}

bdfore 의 순서를 바꾸어 after를 만들 수 있는지 확인해야 합니다.

따라서 먼저 split을 사용해 문자열을 각 문자로 분리한 후 sort 메서드를 사용해 알파벳 순으로 정렬합니다.

그리고 join을 사용해 정렬된 문자들을 다시 하나의 문자열로 합칩니다.

정렬된 before와 after를 비교해 두 문자열이 동일하면 1을 반환하고 그렇지 않으면 0을 반환합니다.

 

 

 

 

 

가까운 수

문제 설명

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

제한사항

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

입출력 예

array n result
[3,10,28] 20 28
[10,11,12] 13 12

입출력 예 설명

  • 3, 10, 28 중 20과 가장 가까운 수는 28입니다.
  • 10, 11, 12 중 13과 가장 가까운 수는 12입니다.

출력

function solution(array, n) {
    var closest = array[0]; // 초기값으로 배열의 첫 번째 원소를 가장 가까운 수로 설정합니다.
    var minDiff = Math.abs(n - array[0]); // 초기값으로 배열의 첫 번째 원소와 n의 차이를 절댓값으로 설정합니다.

    for (var i = 1; i < array.length; i++) {
        var diff = Math.abs(n - array[i]); // n과 배열의 현재 원소와의 차이를 절댓값으로 계산합니다.

        if (diff < minDiff || (diff === minDiff && array[i] < closest)) {
            // 현재 원소와 n과의 차이가 최소 차이보다 작거나 같으면서, 현재 원소가 가장 가까운 수보다 작은 경우
            closest = array[i]; // 현재 원소를 가장 가까운 수로 업데이트합니다.
            minDiff = diff; // 최소 차이를 업데이트합니다.
        }
    }

    return closest; // 가장 가까운 수를 반환합니다.
}

먼저 초기값으로 배열의 첫 번째 요소를 가장 가까운 수로 설정하고, 첫 번재 요소와 n의 차이를 절대값으로 계산해 최소 차이로 설정합니다. 그후, 반복문을 사용해 배열의 나머지 원소들과 n과의 차이를 계산합니다. 이때 , 현재 원소와 n과의 차이가 최소 차이보다 작거나 같으면서, 현재 원소가 가장 가까운 수보다 작은 경우에는 가장 가까운 수와 최소 차이를 없데이트 합니다.

 

k 의 개수

문제 설명

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

입출력 예

i j k result
1 13 1 6
10 50 5 5
3 10 2 0

입출력 예 설명

  • 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.
  • 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.

출력

function countOccurrences(i, j, k) {
    var count = 0; // 등장 횟수를 저장할 변수를 초기화합니다.

    for (var num = i; num <= j; num++) {
        var strNum = num.toString(); // 숫자를 문자열로 변환합니다.
        var occurrences = strNum.split(k.toString()).length - 1; // k가 등장하는 횟수를 계산합니다.
        count += occurrences; // 등장 횟수를 누적합니다.
    }

    return count; // 등장 횟수를 반환합니다.
}

function solution(i, j, k) {
    return countOccurrences(i, j, k);
}

반복문을 사용해 i부터 j까지의 수를 순회하면서 각 숫자를 문자열로 변환한 후 문자열에서 k가 등장하는 횟수를 계산합니다.

이때 k가 등장하는 횟수는 문자열을 k로 분리한 후 분리된 부분 문자열의 개수에서 1을 뺀 값입니다. 등장 횟수를 계산하여count 변수에 누적합니다.

 

숨어있는 숫자의 덧셈

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ my_string 안의 자연수 ≤ 1000
  • 연속된 수는 하나의 숫자로 간주합니다.
  • 000123과 같이 0이 선행하는 경우는 없습니다.
  • 문자열에 자연수가 없는 경우 0을 return 해주세요.

입출력 예

my_string result
"aAb1B2cC34oOp" 37
"1a2b3c4d123Z" 133

입출력 예 설명

  • "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.
  • "1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.

출력

function extractNumbers(str) {
    var regex = /[0-9]+/g; // 정규식 패턴을 사용하여 문자열에서 자연수를 추출합니다.
    var numbers = str.match(regex); // 정규식에 맞는 자연수들을 추출하여 배열로 반환합니다.

    return numbers ? numbers.map(Number) : []; // 자연수 배열을 반환하며, 배열이 없을 경우 빈 배열을 반환합니다.
}

function sumNumbers(str) {
    var numbers = extractNumbers(str); // 문자열에서 자연수를 추출합니다.
    var sum = 0; // 자연수들의 합을 저장할 변수를 초기화합니다.

    for (var i = 0; i < numbers.length; i++) {
        sum += numbers[i]; // 자연수들을 더하여 합을 계산합니다.
    }

    return sum; // 합을 반환합니다.
}

function solution(my_string) {
    return sumNumbers(my_string);
}

정규식 패턴을 사용해 문자열에서 자연수를 추출합니다.

추출한 자연수들은 배열로 반환되어 배열이 없을 경우 빈 배열을 반환합니다.

sumNumbers함수는 estractNumbers 함수를 호출하여 문자열에서 추출한 자연수 배열을 가져온 후, 반복문을 사용해 자연수들을 더하여 합을 계산합니다.

반응형