TIL28 - JavaScript Replit Assignment [vol.4]

오지수·2021년 6월 13일
0

JavaScript

목록 보기
15/18
post-thumbnail

16. for문

::Assignment::

findSmallestElement 함수를 구현해 주세요.

  • findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.

  • arr 의 값들 중 가장 작은 값을 리턴 해주세요.

  • 만일 arr 가 비어있으면 0을 리턴 해주세요.

  • 예를 들어, 다음과 같은 배열이 인자(input)으로 들어왔다면 1이 리턴 되어야 합니다.

[20, 200, 23, 1, 3, 9]

My code

function findSmallestElement(arr) {
  // arr은 숫자
  // arr 값 중 가장 작은 값을 리턴
  // arr가 비어있으면 0
  let min = arr[0];
  if (arr.length < 1) {
      return 0;
  } else {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i + 1] < min) {
          min = arr[i + 1];
        }
      }
      return min;
  }
}
  1. min에 첫번째 값을 할당함
  2. 배열의 요소가 있다면 배열의 요소를 전체적으로 탐색하면서 min보다 작은 값이 존재한다면 min에 그 값으로 재할당함
  3. min을 리턴함

Another solution

function findSmallestElement(arr) {
  if( arr.length === 0 ) return 0;
  let min = arr[0];
  for(let i = 0; i < arr.length; i++) {
    if(min > arr[i]) min = arr[i];
  }
  return min;
}
  • 중괄호와 else를 생략하여 저렇게 간단하게 나타낼 수 있다.

Result


17. 배열 조작하기

::Assignment::

divideArrayInHalf 함수를 다음과 같이 구현해주세요.

  • divideArrayInHalf 함수는 array를 인자로 받습니다. 이 array는 숫자 값으로 만 구성되어 있으며 총 5개의 요소(element)들로 구성되어 있습니다.
  • divideArrayInHalf 함수는 인자로 들어온 array 로 부터 새롭게 구성된 배열 result 을 리턴합니다.
  • array 요소들 중 10과 같거나 작은 값의 요소들은 result의 맨 앞으로, 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴 해주세요.
  • 재구성이 되는 순서는 array의 맨 뒤 요소부터 맨 앞 요소까지 입니다. 즉, 배열의 뒷 요소 부터 재구성을 진행해주세요.
  • 예를 들어, 인자로 들어오는 array가 다음과 같을 때,
[1, 20, 10, 5, 100]

result 배열이 만들어 지는 순서는 다음과 같습니다.

  • [100]
  • [5, 100]
  • [10, 5, 100]
  • [10, 5, 100, 20]
  • [1, 10, 5, 100, 20]

따라서 아래와 같은 result가 리턴 되어야 합니다.

[1, 10, 5, 100, 20]

My code

function divideArrayInHalf(array) {
    let result = [];
    for (let i = array.length - 1; i >= 0; i--) {
      if (array[i] <= 10) {
        result.unshift(array[i]);
      } else {
        result.push(array[i]);
      }
    }
    return result;
}
  1. array 안의 요소들을 거꾸로 탐색한다
  2. 만약 10보다 작거나 같은 요소가 있다면 새 배열 result의 맨 앞으로 삽입한다.
  3. 요소가 10보다 크다면 result의 맨 뒤로 삽입한다.
  4. 결과값을 리턴한다.

Another result

function divideArrayInHalf(array) {
  let result = [];
  for(let i = 4; i >= 0; i--) {
    if(array[i] <= 10) result.unshift(array[i]);
    if(array[i] > 10) result.push(array[i]);
  }
  return result;
}
  • if문이 참일경우 실행하는 구문이 한 줄이라면 {} 생략이 가능하구나!

Result


19. String

::Assignment::

sliceCityFromAddress 함수를 구현해 주세요.

  • sliceCityFromAddress 함수는 address 를 인자로 받습니다.
  • address 는 주소를 나타내는 string 입니다.
  • 주어진 주소가 어느 도시 인지를 찾아 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.
  • 도시는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
  • "도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.
  • 예를 들어, 다음과 같은 주소가 주어졌다면;
"경기도 성남시 분당구 중앙공원로 53"

다음과 같은 값이 리턴되어야 합니다:

"경기도 분당구 중앙공원로 53"

My code

처음에 접근했던 방식은 다음과 같다.

  • address에서 시와 첫 공백을 찾는다.
  • (처음 위치 ~ 공백 위치) + (시의 위치+1 ~ 끝까지)를 slice를 이용하여 잘라 출력한다.

하지만 문제가 발생하였다. 만약 주소에 도가 포함되어 있지 않다면 잘못된 결과가 나오기 때문이다.

그래서

  • 도의 위치와 시의 위치를 찾는다.
  • 도가 포함되어 있지 않을 때와 도가 포함되어 있을 때를 나누어 문장을 자른다.

이렇게 변경하였다.

function sliceCityFromAddress(address) {
  let result;
  let findDo = address.indexOf('도');
  let findSi = address.indexOf('시'); 
  
  // 도가 없으면
  if (findDo === -1) {
    result = address.slice(findSi+2);
  } else {
    // 도가 있으면
    result = address.slice(0, findDo+1) + address.slice(findSi+1);
  }
  
  return result;
}

Result


20. String <-> Number 변환

::Assignment::

nationalPensionRemainingYearCount 함수를 구현해주세요.

  • 우리나라는 국민연금을 만 65세 부터 받을 수 있습니다.
  • nationalPensionRemainingYearCount 는 age_string 이라는 input을 받습니다.
  • age_string 은 나이 값인데 string형 값으로 되어 있습니다.
  • 주어진 나이부터 몇년이 지나야 국민연금을 받을수 있는지 리턴 해주세요.
  • 리턴 값은 다음과 같습니다.
"앞으로 20년 남으셨습니다"
  • 예를 들어, age_string 값이 다음과 같다면:
"35"

리턴 값은 다음과 같아야 합니다.

"앞으로 30년 남으셨습니다"

My code

function nationalPensionRemainingYearCount(age_string) {
  // 만 65세
  let rest = 65 - age_string;
  let result = "앞으로 " + rest + "년 남으셨습니다";
  return result;
}

Another solution

function nationalPensionRemainingYearCount(age_string) {
  let age = Number(age_string);
  let yearsLeft = 65 - age;
  return `앞으로 ${yearsLeft}년 남으셨습니다`;
}
  • Number - 문자열 => Number의 특성을 이용하여 Number값을 리턴하였지만, 다른 솔루션에서는 매개변수 값을 Number()를 이용해 형변환 해준 뒤 계산해주었다.
  • Template literals를 이용하여 바로 리턴하였다.

Result

profile
My Moto:: 내 스스로와 더불어 주변에게도 좋은 영향을 행사하도록 점검 & 노력..!!

0개의 댓글