“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
코딩 테스트 입문
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 함수를 호출하여 문자열에서 추출한 자연수 배열을 가져온 후, 반복문을 사용해 자연수들을 더하여 합을 계산합니다.