Algorithm Basic_#1
문제 01 📓
배열을 입력받아 차례대로 배열의 첫 요소와 마지막 요소를 키와 값으로 하는 객체를 리턴해야 합니다.
- 입출력
- 입력: string 타입을 요소로 갖는 배열
- 출력: 객체
- 입출력 예시
let arr = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
let output = transformFirstAndLast(arr);
console.log(output); // --> { Queen : 'Beyonce' }
arr = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey'];
output = transformFirstAndLast(arr);
console.log(output); // --> { Kevin : 'Spacey' }
- 나의 풀이
1) 빈 객체를 할당한 변수 하나를 선언한다
2) arr[0]
key값, arr(arr.length-1)
는 값
function transformFirstAndLast(arr) {
let obj = {};
if (arr.length === 0) {
return obj
}
obj[arr[0]] = arr[arr.length-1]
return obj;
}
- 결과
통과 👌
- Reference code
function transformFirstAndLast(arr) {
let result = {};
if (arr.length > 0) {
result[arr[0]] = arr[arr.length - 1];
}
return result;
}
arr.length > 0
조건을 통해 나의 풀이보다 심플하고 잘 정리된 코드였다.
문제 02 📓
연이율을 입력받아 원금이 2배 이상이 될 때까지 걸리는 시간(년)을 리턴해야 합니다.
- 입출력
- 입력: number 타입의 연이율 (%)
- 출력: number 타입
- 입출력 예시
let output = computeWhenDouble(7);
console.log(output); // --> 11
output = computeWhenDouble(10);
console.log(output); // --> 8
- 나의 풀이
1) 원금에 interestRate/100을 곱하면 이자가 나오고 이자를 원금에 붙인다
2) 이자가 붙으면 1년이 올라가고 원금의 2배가 되는 시점의 년수를 계산한다
function computeWhenDouble(interestRate) {
let inter = interestRate / 100
let year = 0
for (a = 1; a < 2; a+= (a * inter)) {
year += 1
} return year
}
- 결과
통과 👌
- Reference code
function computeWhenDouble(interestRate) {
let rate = 1 + interestRate / 100;
let principal = 1;
let year = 0;
while (principal < 2) {
principal = principal * rate;
year++;
}
return year;
}
Reference code에서 이자율의 경우
rate = 1 + interestRate / 100
로 계산했다. 나의 풀이에서는 증감식에a+= (a * inter)
로 작성했다. 이자율 계산 문제에서는 참조하자.
문제 03 📓
수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
- 입출력
- number 타입의 정수 (num >= 1)
- boolean 타입
- 입출력 예시
let output1 = powerOfTwo(16);
console.log(output1); // true
let output2 = powerOfTwo(22);
console.log(output2); // false
- 주의 사항
- 반복문(while)문을 사용해야 합니다.
- 2의 0승은 1입니다.
- Number.isInteger, Math.log2, Math.log 사용은 금지됩니다.
- 나의 풀이
1) 1이 2의 0승인 경우 True를 반환한다
2) while 초기식은 a = 2
부터 시작한다. 증감은 a만큼 증가(a = a + a
)하도록 한다. 그렇게 증가한 수와 인자 num이 일치한다면 해당 num은 2의 거듭제곱 값이다.
function powerOfTwo(num) {
if (num === 1) {
return true;
}
let a = 2
while(a <= num) {
a = a + a;
if(a === num) {
return true;
}
}
return false;
}
- 결과
통과 👌
- Reference code
function powerOfTwo(num) {
if (num === 1) {
return true;
}
if (num % 2) {
return false;
}
let powered = 2;
while (powered < num) {
powered = powered * 2;
}
return powered === num;
}
1과 홀수를 먼저 걸렀다.
a = a + a
라는 식 대신powered = powered * 2
식을 사용했다. 같은 결과이다.
문제 04 📓
문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자로 이루어진 문자열을 리턴해야 합니다.
- 입출력
- 입력: string 타입의 공백이 있는 알파벳 문자열
- 출력: string 타입
- 입출력 예시
let output = firstCharacter('hello world');
console.log(output); // --> "hw"
output = firstCharacter(
'The community at Code States might be the biggest asset'
);
console.log(output); // --> "TcaCSmbtba"
- 나의 풀이
1) 빈 문자열인 경우 빈 문자열을 리턴한다
2) 문자열을 split 메소드를 활용하여 (' ') 공백 기준으로 나눈 배열로 만든다
3) 각 배열을 for문으로 순회하고, 인덱스의 첫 글자만 따로 선언해 놓은 변수에 넣고, 해당 변수를 리턴한다
function firstCharacter(str) {
if (str === '') {
return ''
}
let newStr = ''
let arr = str.split(' ')
for (i = 0; i < arr.length; i++) {
newStr = newStr + arr[i][0]
}
return newStr
}
- 결과
통과 👌
Author And Source
이 문제에 관하여(Algorithm Basic_#1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jonghwan2_y/Algorithm-Basic1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)