“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
코딩테스트 입문
영어가 싫어요
문제설명
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
제한사항
- numbers는 소문자로만 구성되어 있습니다.
- numbers는 "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" 들이 공백 없이 조합되어 있습니다.
- 1 ≤ numbers의 길이 ≤ 50
- "zero"는 numbers의 맨 앞에 올 수 없습니다.
입출력예
numbers | result |
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
입출력예설명
- "onetwothreefourfivesixseveneightnine"를 숫자로 바꾼 123456789를 return합니다.
- "onefourzerosixseven"를 숫자로 바꾼 14067를 return합니다.
출력
function solution(numbers) {
var number_dict = {
"zero": 0,
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
"six": 6,
"seven": 7,
"eight": 8,
"nine": 9
};
var answer = "";
var word = "";
for (var i = 0; i < numbers.length; i++) {
word += numbers[i];
if (word in number_dict) {
answer += number_dict[word];
word = "";
}
}
return parseInt(answer);
}
먼저 number_dict라는 객체를 생성하여 영어 단어와 해당하는 숫자를 매핑합니다. 그리고 answer 변수를 빈 문자열로 초기화하고, word 변수를 빈 문자열로 초기화합니다.
문자열 numbers를 한 글자씩 읽어가면서 word에 글자를 추가합니다. word가 number_dict 객체의 키로 존재하는지 확인하여 해당하는 숫자를 answer에 추가합니다. 그리고 word를 초기화합니다.
숫자로 변환된 answer를 최종적으로 반환하기 전에 parseInt 함수를 사용하여 정수로 변환합니다.
예를 들어, solution("onetwothreefourfivesixseveneightnine")를 호출하면 123456789가 반환됩니다. 마찬가지로, solution("onefourzerosixseven")를 호출하면 14067가 반환됩니다.
한 번만 등장한 문자
문제 설명
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
제한사항
- 0 < s의 길이 < 1,000
- s는 소문자로만 이루어져 있습니다.
입출력예
s | result |
"abcabcadc" | "d" |
"abdc" | "abcd" |
"hello" | "eho" |
입출력예설명
- "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
- "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
- "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
출력
function solution(s) {
var charCount = {};
for (var i = 0; i < s.length; i++) {
var char = s[i];
if (charCount[char] === undefined) {
charCount[char] = 1;
} else {
charCount[char]++;
}
}
var uniqueChars = [];
for (var char in charCount) {
if (charCount[char] === 1) {
uniqueChars.push(char);
}
}
uniqueChars.sort();
return uniqueChars.join("");
}
charCount라는 빈 객체를 생성합니다. 이 객체는 각 문자의 등장 횟수를 저장할 것입니다.
문자열 s를 순회하면서 각 문자의 등장 횟수를 charCount 객체에 저장합니다. 만약 charCount 객체에 해당 문자가 없으면 등장 횟수를 1로 초기화하고, 이미 있다면 등장 횟수를 1 증가시킵니다.
charCount 객체를 순회하면서 등장 횟수가 1인 문자들을 찾아 uniqueChars 배열에 추가합니다.
uniqueChars 배열을 사전 순으로 정렬합니다.
uniqueChars 배열을 문자열로 변환하여 반환합니다.
예를 들어, solution("abcabcadc")를 호출하면 "d"가 반환됩니다. 문자열 "abcabcadc"에서 등장 횟수가 1인 문자는 "d" 하나뿐입니다. 또한, solution("abdc")를 호출하면 "abcd"가 반환됩니다. 문자열 "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 반환합니다. 마지막으로, solution("hello")를 호출하면 "eho"가 반환됩니다. 문자열 "hello"에서 등장 횟수가 1인 문자는 "h", "e", "o"이고, 이를 사전 순으로 정렬한 "eho"를 반환합니다.
한 번만 등장한 문자
문제 설명
my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
제한사항
- 연산자는 +, -만 존재합니다.
- 문자열의 시작과 끝에는 공백이 없습니다.
- 0으로 시작하는 숫자는 주어지지 않습니다.
- 잘못된 수식은 주어지지 않습니다.
- 5 ≤ my_string의 길이 ≤ 100
- my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
- my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
- 계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
- my_string에는 연산자가 적어도 하나 포함되어 있습니다.
- return type 은 정수형입니다.
- my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.
입출력예
my_string | result |
"3+4" | 7 |
입출력예설명
- 3 + 4 = 7을 return 합니다.
출력
function solution(my_string) {
var numbers = my_string.split(" ").filter(function (element) {
return !isNaN(element);
});
var operators = my_string.split(" ").filter(function (element) {
return isNaN(element);
});
var result = parseInt(numbers[0]);
for (var i = 0; i < operators.length; i++) {
var operator = operators[i];
var number = parseInt(numbers[i + 1]);
if (operator === '+') {
result += number;
} else if (operator === '-') {
result -= number;
}
}
return result;
}
my_string을 공백을 기준으로 분리하여 숫자와 연산자로 구분합니다. 숫자는 numbers 배열에, 연산자는 operators 배열에 저장합니다.
result 변수를 첫 번째 숫자로 초기화합니다.
operators 배열을 순회하면서 각 연산자에 대해 해당하는 숫자를 가져와 계산합니다. 연산자가 +이면 숫자를 더하고, 연산자가 -이면 숫자를 빼서 result에 저장합니다.
최종적으로 result를 반환합니다.
예를 들어, solution("3 + 4")를 호출하면 7이 반환됩니다. 문자열 "3 + 4"의 첫 번째 숫자는 3이고, 연산자는 +이므로 3과 4를 더한 결과인 7을 반환합니다.
한 번만 등장한 문자
문제 설명
이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- return 값은 이진수를 의미하는 문자열입니다.
- 1 ≤ bin1, bin2의 길이 ≤ 10
- bin1과 bin2는 0과 1로만 이루어져 있습니다.
- bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.
입출력예
bin1 | bin2 | result |
"10" | "11" | "101" |
"1001" | "1111" | "11000" |
입출력예설명
- 10 + 11 = 101 이므로 "101" 을 return합니다.
- 10 + 11 = 101 이므로 "101" 을 return합니다.
출력
function solution(bin1, bin2) {
var result = "";
var carry = 0;
var maxLength = Math.max(bin1.length, bin2.length);
var paddedBin1 = bin1.padStart(maxLength, "0");
var paddedBin2 = bin2.padStart(maxLength, "0");
for (var i = maxLength - 1; i >= 0; i--) {
var digit1 = parseInt(paddedBin1[i]);
var digit2 = parseInt(paddedBin2[i]);
var sum = digit1 + digit2 + carry;
var currentDigit = sum % 2;
carry = Math.floor(sum / 2);
result = currentDigit + result;
}
if (carry > 0) {
result = carry + result;
}
return result;
}
result 변수를 빈 문자열로 초기화하고, carry 변수를 0으로 초기화합니다. result에 최종 결과를 저장하고, carry는 자릿수 올림을 처리하는 데 사용됩니다.
bin1과 bin2 중 더 긴 문자열의 길이를 구합니다. 이 길이를 기준으로 다른 문자열을 왼쪽에 0을 추가하여 길이를 맞춥니다. (padStart 함수를 사용하여 왼쪽에 0을 추가합니다.)
가장 오른쪽 자릿수부터 왼쪽으로 순회하면서, 해당 자릿수의 숫자를 가져옵니다. 숫자를 가져올 때는 해당 자릿수의 문자열을 정수로 변환합니다.
두 숫자와 이전 자릿수에서 발생한 올림(carry)을 더한 결과를 구합니다. 현재 자릿수의 숫자는 이 결과를 2로 나눈 나머지이고, 올림은 이 결과를 2로 나눈 몫입니다.
현재 자릿수의 숫자를 결과 문자열인 result의 가장 왼쪽에 추가합니다.
모든 자릿수에 대해 반복합니다.
만약 마지막 자릿수까지 계산을 마친 후에도 올림이 발생한다면, 최종 결과에 1을 추가합니다.
최종 결과 문자열 result를 반환합니다.