코플릿 시간에 페어와 알고리즘 문제를 풀었다. 오늘과 내일 총 이틀에 걸쳐 20문제를 풀라고 해서 널널한줄 알았더니.. ㅎㅎ 역시나 갈수록 어려운 문제들이 있어서 어떤 문제는 1시간을 넘게 생각해서 풀어야 했다.
논리적 사고를 바탕으로 푼다는게 너무 어렵게 느껴진다 ㅠ
배열을 입력받아 차례대로 배열의 첫 요소와 마지막 요소를 키와 값으로 하는 객체를 리턴해야 합니다.
let arr = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
let output = transformFirstAndLast(arr);
console.log(output); // --> { Queen : 'Beyonce' }
function transformFirstAndLast(arr) {
let obj = {};
if(arr.length !== 0) {
obj[arr[0]] = arr[arr.length-1];
}
return obj;
}
연이율을 입력받아 원금이 2배 이상이 될 때까지 걸리는 시간(년)을 리턴해야 합니다.
let output = computeWhenDouble(7);
console.log(output); // --> 11
function computeWhenDouble(interestRate) {
let myMoney = 1;
let year = 0;
while(myMoney < 2) {
myMoney = myMoney + (myMoney * interestRate/100);
year++
}
return year;
}
수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
let output1 = powerOfTwo(16);
console.log(output1); // true
let output2 = powerOfTwo(22);
console.log(output2); // false
function powerOfTwo(num) {
let square = 2;
if(num === 1) {
return true;
}
while(square < num) {
square = square * 2;
}
return num === square;
}
문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴해야 합니다.
let output = firstCharacter('hello world');
console.log(output); // --> "hw"
function firstCharacter(str) {
if(str === '') {
return ''
}
let words = str.split(' ');
let firstOnly = '';
for(let i=0; i<words.length; i++) {
firstOnly = firstOnly + words[i][0];
}
return firstOnly;
}
문자열을 입력받아 순서가 뒤집힌 문자열을 리턴해야 합니다.
let output = firstReverse('codestates');
console.log(output); // "setatsedoc"
function firstReverse(str) {
return str.split('').reverse().join('');
}
function firstReverse(str) {
if(str === '') {
return '';
}
let result = str[str.length-1];
for(let i=1; i<str.length; i++) {
result = result + str[str.length-1-i]
}
return result;
}
문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열을 리턴해야 합니다.
let output1 = letterCapitalize('hello world');
console.log(output1); // "Hello World"
function letterCapitalize(str) {
if(str === '') {
return '';
}
let toArr = str.split(' ');
for(let i=0; i<toArr.length; i++) {
if(toArr[i] !== '') {
toArr[i] = toArr[i][0].toUpperCase() + toArr[i].substring(1);
}
}
return toArr.join(' ');
}
연속된 공백이 존재할 경우 split()을 사용해 하나의 공백을 기준으로 잘라주게 되면 공백이 하나의 빈문자열로 배열에 들어가게 된다.
2차원 배열(배열을 요소로 갖는 배열)을 입력받아 각 배열을 이용해 만든 객체를 리턴해야 합니다.
arr[i]
는 string 타입을 요소로 갖는 배열arr[i].length
는 0 또는 2arr[i]
의 첫 번째 요소를 키, 두 번째 요소를 값으로 하는 객체를 리턴해야 합니다.const arr = [
['make', 'Ford'],
['model', 'Mustang'],
['year', '1964'],
['make', 'Bill'],
];
let output = convertListToObject(arr);
console.log(output) // -->
{
make : 'Ford'
model : 'Mustang',
year : '1964'
}
function convertListToObject(arr) {
let obj = {};
if( arr.length === 0 ) {
return obj;
}
for(let i in arr) {
// obj[arr[i][0]] === undefined 줘도 조건식이 같다.
if( arr[i].length !== 0 && !(arr[i][0] in obj) ) {
obj[arr[i][0]] = arr[i][1];
}
}
return obj;
}
문자열을 입력받아 해당 문자열에 등장하는 두 칸의 공백을 모두 한 칸의 공백으로 바꾼 문자열을 리턴해야 합니다.
let output = convertDoubleSpaceToSingle('string with double spaces');
console.log(output); // --> "string with double spaces"
str[i]
번째가 공백 + str[i+1]
공백이 아닐때function convertDoubleSpaceToSingle(str) {
let result = '';
for(let i=0; i<str.length; i++) {
if(!(str[i] === ' ' || str[i+1] === ' ')) {
result = result + str[i];
}
}
return str;
}
아래와 같이 메소드를 이용해서 문자열을 두 개의 공백으로 쪼개주고 join()을 통해서 다시 공백 하나만을 넣어 연결해줄 수도 있다.
function convertDoubleSpaceToSingle(str) {
return str.split(' ').join(' ');
}
문자열을 입력받아 문자열 내에 아래 중 하나가 존재하는지 여부를 리턴해야 합니다.
'a'로 시작해서 'b'로 끝나는 길이 5의 문자열
'b'로 시작해서 'a'로 끝나는 길이 5의 문자열
let output = ABCheck('lane Borrowed');
console.log(output); // --> true
function ABCheck(str) {
if(str === undefined) {
return false;
}
str = str.toLowerCase();
for(let i=0; i<str.length; i++) {
if((str[i] === 'a' && str[i+4] === 'b') || (str[i] === 'b' && str[i+4] === 'a')) {
return true;
}
return false;
}
}
문자열을 입력받아 연속된 한자리 홀수 숫자 사이에 '-'를 추가한 문자열을 리턴해야 합니다.
0은 짝수로 간주합니다.
let output = insertDash('454793');
console.log(output); // --> 4547-9-3
function insertDash(str) {
let result = '';
for(let i=0; i<str.length; i++) {
if(parseInt(str[i]) % 2 === 1 && parseInt(str[i+1]) % 2 === 1) {
result += str[i] + '-';
}
}
return result;
}