D.evelop [CS]/Algorithm

[Algorithm 008] JS - 1주차 test 다시 풀기

Danne 2021. 9. 23. 23:39

✔️ 3주차에 1주차 시험문제 다시 풀어보기

 

 

-

 

getGender

인자로 사람에 대한 정보가 담긴 객체를 받습니다.
그 중 성별을 반환하는 함수를 만들어주세요.

 

input 예시 : { name: 'tom', age: 30, gender: 'male' }

input 예시 : { name: 'tom', age: 30, gender: 'male' }

 

// test objects
let inputValue = {
  name: 'tom', 
  age: 30, 
  gender: 'male'
}

// 답
function getGender(person) {
  return person.gender
}


getGender(inputValue)   // 'male'
  • Dot Notation(object.key)을 이용해 value값을 구함.

 

 

 


 

 

getThirdElement

인자로 반드시 길이가 2 이상인 배열이 들어옵니다.
배열의 세번째 요소를 반환하는 함수를 구현해주세요.

function getThirdElement(arr){
 return arr[2];
}

getThirdElement([1, 2, 3]);   // 3




 

 

 isFemaleAndAdult

성인이면서 여성일 경우에만 true를 반환하는 함수를 구현해주세요.
함수는 인자를 하나 받으며 항상 아래와 같은 객체가 들어옵니다.

input 예시 : { name: 'tom', age: 30, gender: 'male' }

 

* @param {Object} person - person info

* @param {string} person.name - name of person

* @param {number} person.age - age of person

* @param {string} person.gender - gender of person

* 'male'이 남성, 'female'이 여성을 의미합니다.
* 19세까지는 미성년자, 20세부터는 성인으로 가정합니다.

// test objects
let inputValue1 = { name: 'tom', age: 30, gender: 'male' }
let inputValue2 = { name: 'jane', age: 20, gender: 'female' }
let inputValue3 = { name: 'lilly', age: 14, gender: 'female' }


// 답
function isFemaleAndAdult(person) {

  if( 19 < person.age && person.gender === 'female'){
    return true
  }
  return false
}

isFemaleAndAdult(inputValue1)   // false
isFemaleAndAdult(inputValue2)   // true
isFemaleAndAdult(inputValue3)   // false
  • 동등연산자를 사용하는 gender의 경우 value가 string형으로 들어온다는 조건이 있으므로 "==="(일치연산자)를 사용했다.

 

 


 

 

getFirstTwoElements

함수는 인자를 하나 받으며 배열이 들어옵니다.
배열의 길이가 3이상일 때, slice를 사용하여 앞에서 2개만 잘라 반환합니다.
배열의 길이가 2이하일 때, "배열이 너무 짧아요!" 라는 string을 반환합니다.

// test arrays
const arr1 = [1, 2, 3]
const arr2 = [5, 6]


// 답
function getFirstTwoElements(arr) {
  
  if ( 3 <= arr.length ){
    return  arr.slice(0, 2)
  }else if(arr.length <= 2){
    return "배열이 너무 짧아요!"
  }
  
}

getFirstTwoElements(arr1)   // [ 1, 2 ]
getFirstTwoElements(arr2)   // '배열이 너무 짧아요!'

slice메서드

 

 


 

 

getSumOfArray

배열은 길이가 1이상이며 모든 요소가 숫자로 되어있습니다.
배열 모든 요소의 합을 반환하는 함수를 구현해주세요.

// test arrays
const arr1 = [1 ,2 ,3, 4, 5]
const arr2 = [100, 200, 300]


// 답
function getSumOfArray(arr){
  
  let num = 0;
  for( i = 0 ; i < arr.length ; i++ ){
    num += arr[i]
  }
  return num
}

getSumOfArray(arr1)   // 15
getSumOfArray(arr2)   // 600

 

 

 


 

 

findMaleName

배열에서 남성을 찾아 그 이름을 반환하는 함수를 만들어주세요.
함수는 인자로 객체가 요소인 배열을 받습니다.
배열의 요소는 각 사람에 대한 객체이며 아래는 배열의 예시입니다.

const arr1 = [
  { name: 'sera', age: 30, gender: 'female' },
  { name: 'tom', age: 10, gender: 'male' }
]

const arr2 = [
  { name: 'jane', age: 30, gender: 'female' }
]

 

배열에는 남성이 없거나 오직 한 명만 있습니다.
배열에 남성이 없다면 false를 반환해주세요.
'male'이 남성, 'female'이 여성을 의미합니다.

 

function findMaleName(arr) {
  
  for ( i = 0 ; i < arr.length ; i++ ){
    if ( arr[i].gender === 'male' ){
     return arr[i].name
    }
  }
  return false

}

 findMaleName(arr1) // 'tom'
 findMaleName(arr2) // false

 

 

이 문제를 풀다가 현우님과 '남자가 여러명이면?'이라는 조건을 붙여 수정해봤다.

const arr = [
  { name: 'sera', age: 30, gender: 'female' },
  { name: 'tom', age: 10, gender: 'male' },
  { name: 'belle', age: 30, gender: 'female' },
  { name: 'jack', age: 20, gender: 'male' },
  { name: 'dan', age: 70, gender: 'male' },
]


function findMaleName(arr) {
  
  let maleArr = [];
  
  for ( i = 0 ; i < arr.length ; i++ ){
    if ( arr[i].gender == 'male' ){
      maleArr.push(arr[i].name)
    }
  }
  return maleArr

}

 findMaleName(arr)    // [ 'tom', 'jack', 'dan' ]

 

 

 

 


 

 

 

불과 3주전엔 머리를 쥐어짜고 겨우 풀었던 문제인데 지금은 술술 풀어진다.

지금의 나는 한 달전의 나보다 성장했구나.

 

 

처참했던 첫 테스트와 열심히 풀어서 다 패스 시켰던 테스트화면. 기분 좋아서 캡쳐했다.

 

 

 

 

반응형