다양한 숫자의 인자를 받아서 그에 따른 결과를 반환하기
인자
(input) → 함수 →반환
(output, 결과)
meetAt(2022); // 결과 --> "2022년" meetAt(2032, 3); // 결과 --> "2032년 3월" meetAt(1987, 10, 28); // 결과 --> "1987/10/28"
**meetAt
함수를 만들어주세요.**
- 인자를 세개 받습니다.
첫번째 인자
는 년도에 해당하는 숫자입니다.두번째 인자
는 월에 해당하는 숫자입니다.세번째 인자
는 일에 해당하는 숫자입니다.
- 인자가 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 넘버)
+/
을
출력하도록 하신 것 같다.
이런 방식으로도 문제를 풀 수 있었다니 나는 미처 생각하지 못한 부분이었다. (다들 대단)
생각과 접근을 어떻게 하느냐에 따라 다양한 방법으로 답을 도출 할 수 있다는게 재미있다.
오늘도 이렇게 미션 문제를 풀며 많은 것을 배워간다.