Algorithm Basic_#1

19159 단어 algorithmalgorithm

문제 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
}

- 결과

통과 👌

좋은 웹페이지 즐겨찾기