문제 -배열 && 객체-

hyo·2021년 11월 23일
0

배열 문제

25번

문제 : 수(num)를 입력받아 num번째까지 총 num + 1 개의 피보나치 수열을 리턴해야함.

-인자 : num
number타입의 num (num은 0 이상의 정수)
-출력 -> 배열을 리턴해야함
-주의사항-
반복문(for)문 사용하라.
피보나치 수열은 0번부터 시작한다.
ex) 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...
-입출력예시-
let output = fibonacci(5);
console.log(output[5]); --> 5
console.log(output); --> [0,1,1,2,3,5]

수도코드 작성

// 피보나치 수열 0번부터 시작해주며 이전값과 그이전값을 더한 값을 현재값에 넣어주며 반복해주기
// 인자(num) + 1 과 리턴되는 배열의 길이는 같게.

코드 작성

설명

function fibo(num) {
    let result = []; // 결과값으로 내줄 배열을 우선 빈 배열로 선언
    for (let i = 0; i <= num; i++) {// result라는 빈배열의 인덱스(num=인덱스)마다 요소들을 추가할 것이므로  반복문 작성
      if (i === 0) { // i가 0일때 result[0] = 0 을 넣어준다.(즉 이후 반복하며 더해줄 초기값을 설정해주는것)
        result.push(0);
      } else if (i === 1) { // i가 1일때 result[1] = 1 넣어준다. 피보나치수열은 현재값 = 이전값 + 그 이전값 이므로 최소 2개의 수가 있어야하므로 i가 1일때 까지는 할당시켜준다.
        result.push(1);
      } else { // result[현재인덱스] = result[이전 인덱스] + result[그 이전 인덱스] 를 써줘서 i가 num까지 반복하는동안 계속 할당해준다.
        result.push(result[i - 1] + result[i - 2]);
      }
    }
    return result;
  }

객체 문제

19번

문제 : 두 개의 객체를 입력받아 두번째 객체의 속성들을 첫번째 객체에 추가해야한다.

인자1,2 : obj1, obj2 는 임의의 속성을 갖는 객체
출력 - 별도의 리턴문 작성 하지말기.
-주의사항-
추가하려는 속성이 이미 첫번째 객체에 존재하는 경우, 기존 값을 그대로 둔다.
두번째 객체는 수정하지 않아야함.

// 입출력 예시
const obj1 = {a: 0, b: 1};
const obj2 = {b: 2, c: 3};
A(obj1,obj2);
console.log(obj1); //--> {a: 0, b: 1, c: 3}
console.log(obj2); //--> {b: 2, c: 3};

수도코드 작성

// obj1에 obj2의 같은 key에 값 덮어씌우지 않기!
// obj2는 원본 그대로 두고 복사해서 사용하기.(객체복사)
// Object.assign(target, source) 사용해보기

코드 작성

설명

function A(obj1, obj2) {
    let newObj2 = { ...obj2 };// obj2를 복사한다. 반복문을써서 새로운객체에 obj2의속성을 추가해주는 방법도 있지만, 전개연산자(...)를 사용해 {...obj2} 라고 써서 객체를 깊은복사 하였다.
    Object.assign(newObj2, obj1);// obj1의 기존 속성의 값이 바뀌면 안되므로 newObj2에 obj1의 동일한key의 값을 덮어씌웠다.
    Object.assign(obj1, newObj2);// 그리고 다시 obj1에 newObj2의 속성을 덮어씌운다.
  }

20번

문제 : 문자열을 입력받아 문자열을 구성하는 각 문자(letter)를 키로 갖는 객체를 리턴해야함. 각 키의 값은 해당 문자가 문자열에서 등장하는 횟수를 의미하는 number타입의 값이어야함.

인자 : str
string 타입의 공백이 없는 문자열
출력- 각문자를 키로 갖는 객체를 리턴!
-주의사항-
빈 문자열을 입력받을시 -> 빈 객체를 리턴!

// 입출력 예시
let output = A('applemango');
console.log(output); //--> {a: 2, p: 2, l: 1, e: 1, m: 1, n: 1, g: 1, o: 1};

수도코드 작성

// 우선 결과값으로 객체를 리턴해야하고 문자와 등장횟수로 이루어진 속성을 추가해줄 빈객체 선언하기
// str을 반복문을 써서 각 문자(letter)에 접근하여
// if조건문을 통해 객체에 result[letter]가 아직 존재하지않는다는 조건에선 그 키의 값으로 1을 넣어주고
// 문자(letter)가 재등장할 경우 +=1 을 해주는식으로 써본다.

코드 작성

설명

function A(str) {
    let result = {};// 속성 추가해줄 빈객체 선언 
    for (let word of str) { // 배열과 마찬가지로 문자열도 for of 반복문으로 접근가능
      if (result[word] === undefined) {// result[word]는 아직 undefined가 당연하기에 이 조건에서 result[word] = 1; 속성을 추가해줌
        result[word] = 1;
      } else {// undefined 가 아닐경우, 원래의 1이라는 키의값이 들어있으므로 += 1 로 더해준다.
        result[word] += 1;
      }
    }
    return result;
  }

21번

문제 : 문자열을 입력받아 가장 많이 반복되는 문자(letter)를 리턴해야한다.

인자 : str
string 타입의 공백이 있는 문장
출력 - string타입 리턴해야함
-주의사항-
띄어쓰기는 제외함.
가장 많이 반복되는 문자가 다수일 경우, 가장 먼저 해당 횟수에 도달한 문자를 리턴해야함.
빈 문자열을 입력받은경우 -> 빈 문자열 리턴!

// 입출력 예시
let output = A('aaa bbbb cccc ddd');
console.log(output); //--> 'b'
let output = A('   ');
console.log(output); //--> ''
let output = A('');
console.log(output); //--> ''

수도코드 작성

// 반복문으로 문자열의 각 문자에 접근하여 몇번 등장하는지 미리만든 객체에 저장해두고 그 문자의 등장횟수가 가장 큰 문자를 리턴
// 가장 많이 반복되는 문자열 (' '띄어쓰기 제외한) 알려면 미리선언해둔 객체 = {문자: '', 등장횟수: 0} 안에 따로 추가해가며
조건문을 통해 기존 속성값(등장횟수의 값)과 비교할 등장횟수의 값이 크다면(<= 이상이 아닌)으로 해주면 후에가장많이 등장한값이 동일하더라도 기존 등장횟수 속성에 덮어씌우지 않게 만들어줄수있으므로

코드 작성

설명

function A(str) {
    let result = { maxWord: "", maxCount: 0 };// 각문자의 등장횟수를 속성으로 추가하고 가장많이 등장하는 횟수와 그 문자를 속성으로 가진 객체를 선언
    for (let i = 0; i < str.length; i++) {// 문자열의 각 문자에 반복적 접근해야하므로 반복문 작성
      if (str[i] === " ") {
        continue; // 문자열의 문자가 공백일때, continue 키워드를 씀으로써 현재 턴의 반복 멈추고 그다음 반복진행!(ex)i = 1 일때 반복중이었다면 continue를 만나면 i = 2일때 반복으로 넘어감)
      }
      if (result[str[i]] === undefined) {
        result[str[i]] = 1; // 처음 등장횟수를 1로 해준다는 속성을 추가
      }
      if (result[str[i]] !== undefined) {
        result[str[i]] += 1; // 이미 등장했던 문자열의 등장횟수 값에 += 1 추가해준다.
      }
      if (result[str[i]] > result["maxCount"]) {// 등장횟수가 높을때만 기존 maxWord키의 값에 str[i](문자)를 덮어씌워줌.
        result["maxWord"] = str[i];
        result["maxCount"] = result[str[i]];
      }
    }
    return result["maxWord"];
  }
profile
개발 재밌다

0개의 댓글