[MISSION] 다양한 숫자의 인자를 받아서 그에 따른 결과를 반환하기

summerlee·2022년 9월 13일
0

TIL

목록 보기
12/39

다양한 숫자의 인자를 받아서 그에 따른 결과를 반환하기

👇 미션 조건 및 간단한 힌트

다양한 숫자의 인자를 받아서 그에 따른 결과를 반환하기

  • 인자(input) → 함수 → 반환(output, 결과)
   	meetAt(2022); // 결과 --> "2022년"
    meetAt(2032, 3); // 결과 --> "2032년 3월"
    meetAt(1987, 10, 28); // 결과 --> "1987/10/28"

**meetAt 함수를 만들어주세요.**

  • 인자를 세개 받습니다.
    1. 첫번째 인자는 년도에 해당하는 숫자입니다.
    2. 두번째 인자는 월에 해당하는 숫자입니다.
    3. 세번째 인자는 일에 해당하는 숫자입니다.

  • 인자가 1개인 경우 (년도 인자만 받았을 경우)
    • "1234년" 과 같은 형식의 문자열을 리턴 해주세요.

  • 인자가 2개인 경우 (년도, 월 인자를 받았을 경우)
    • 년도와 월을 조합해서 "1234년 5월" 과 같은 형식의 문자열을 리턴 해주세요.

  • 인자가 4개인 경우 (년도,월,일 인자를 전부 받았을 경우)
    - 년도,월,일을 조합해서 "1234/5/6" 과 같은 형식의 문자열을 리턴 해주세요.


    [주어진 힌트 중 한가지 ]
  • 매개변수는 준비되어 있는데, 인자를 보내지 않으면 undefined 라는 값이 할당됩니다.
  • 값이 없다는 특성을 활용하여 조건문을 만들 수 있습니다.

시작 전 가벼운 잡담

GHOST RAIN 강의를 듣다가 마주친 중간 미션 문제..
생각보다 어렵고 약 3시간이 걸릴 거라고 예상한다고 하셔서 벌벌 떨며 문제 읽기 시작.

뭔가 if문함수 를 써야 되는건 당연히 알겠는데 대체 어떻게 응용해서 원하는 값을 도출하지?
지금까지 야매로 배워먹은 지식을 응용 해보려니 머리가 안돌아가고 막막하기만 했다 😱

구글링 연습도 필요하지만, 뭔가 내가 배운 지식과 주어진 힌트만을 응용해서 풀고 싶다는 마음이 강했기에
이번 문제는 가능한 구글링 없이 풀어보기! 를 목표로 문제 풀기를 시작했다.


나의 문제풀이

  function meetAt(year, month, day) {

    if(month === undefined && day === undefined) {
      return year + "년"
    } else if(day === undefined) {
      return year + "년 " + month + "월"
    } else {
      return year + "/" + month + "/" + day
     }
  }

  meetAt();
  console.log(meetAt(2022)); // ---> 2022년
  console.log(meetAt(2022,09)); // ---> 2022년 09월
  console.log(meetAt(2022,09,13)); // ---> 2022/09/13

여러번의 시행착오 끝에 이런식으로 undefined 를 이용해 문제 풀기에 성공했다.
처음에는 index 넘버로 접근 해보기도 했고, 발췌는 안했지만 힌트에 있던 if 중첩문 을 이용해보기도 했는데 나의 지식 부족으로 그것들로는 원하는 값이 나오도록 코드를 작성 할 수 없었다. (아마 머릿속에서 여러 방법이 섞여 이상하게 작성한듯 하다 -_-; )


주석을 통한 문제풀이 설명

function meetAt(year, month, day) {

    if(month === undefined && day === undefined) {
      // 만약, 인자 month 와 인자 day 의 값이 둘다 없다면
      return year + "년"
      // 인자 year 의 값에 문자열 "년" 글자를 출력한다.
    } else if(day === undefined) {
      // 만약 인자 day 의 값이 없다면
      return year + "년 " + month + "월"
      // 인자 year 의 값에 문자열 "년" 글자를, month 인자의 값에 문자열 "월" 글자를 출력한다.
    } else {
      // 위의 조건이 다 아니라면
      return year + "/" + month + "/" + day
      // 인자 year, month, day 의 값에 문자열 "/" 글자를 사이마다 넣어 출력한다.
     }
  }

이렇게 나는 조건문 , 비교연산자, 논리연산자 를 사용하여 문제를 풀었다.
풀이가 정확한지는 모르겠지만 일단 원하는 값은 출력되니 나름 만족스러운...😅
엄청 어려울거라고 겁먹었던 것과는 달리 생각보다 빨리 풀었고 막상 풀고 나니 충분히 풀 수 있는 문제였구나 싶어 뿌듯했다. 진짜 쾌감 대박이다...휴


다른 분들의 문제 풀이

다른 분들은 어떻게 푸셨을까? 궁금해서 구글링을 통해 주워온 다른분들의 문제 풀이!

1.

function meetAt(year, month, date) { 
  if (date) {
    return year + "/" + month + "/" + date;
  } else if (month) {
    return year + "년 " + month + "월";
  } else if (year) {
    return year + "년";
  }
}

이분은 boolean 객체를 통해 true, false 를 응용하여 문제를 푸셨다.
(개인적으로 이거 정말 깔끔하고 좋아보인다ㅎ)

👇 작성자분이 함께 올리신 문제 풀이 글 발췌

일단 boolean 객체를 알아야 한다. boolean은 값이 존재하면 true, 값이 비어있으면 false이다.
if 문의 조건식도 조건이 될 수 있는 값은 boolean이기 때문에 인자의 값의 유무에 따라 true, false가 정해진다.
그걸 활용해 if else 문을 사용하면 받은 인자의 개수에 따라 다른 결과값을 출력할 수 있다.


2.

function meetAt(year, month, date) { 
  if (arguments.length === 1) {
    //arguments.length 로 인자의 갯수를 확인
    return arguments[0] + "년";
  } else if (arguments.length === 2) {
    return arguments[0] + "년 " + arguments[1] + "월";
  } else if (arguments.length === 3) {
    return arguments[0] + "/" + arguments[1] + "/" + arguments[2];
  }
}

이분은 arguments.length 를 응용하여 문제를 푸셨다.
console.log(meetAt.length); 를 찍어보면 3 이 나온다
길이 값 3 이라는 숫자를 통해
길이 값이 1일 때0(=year 의 Index 넘버) + 을,
길이 값이 2일 때0 과 1(=month 의 Index 넘버) + 을,
길이 값이 3일 때0 과 1 과 2(=date 의 Index 넘버) + /
출력하도록 하신 것 같다.


이런 방식으로도 문제를 풀 수 있었다니 나는 미처 생각하지 못한 부분이었다. (다들 대단)
생각과 접근을 어떻게 하느냐에 따라 다양한 방법으로 답을 도출 할 수 있다는게 재미있다.
오늘도 이렇게 미션 문제를 풀며 많은 것을 배워간다.

profile
완벽하지 않아도 기록하려고 노력하기 😅

0개의 댓글