내가 자바스크립트 배워본다고 강좌 지른지 좀 된거같은데
열심히 진도나가다가 문제 풀때 맨날 멈칫
그리고 막판 함수문제에서 막혔었는데...
자바스크립트 대현자가 되기위한,,,,,,, 머나먼 여정,,,
일단 닥치는대로 문제를 다양하게 풀어봤었는데 이제 어느정도 감이 잡히길래
오늘 드디어
미루고 미뤄뒀었던 함수문제 풀기 파트까지... 완료하였다...!
https://github.com/Yeonji-Noob/Problem-Solving/blob/main/function.js
GitHub - Yeonji-Noob/Problem-Solving: 다양한 코딩 문제 풀기
다양한 코딩 문제 풀기 . Contribute to Yeonji-Noob/Problem-Solving development by creating an account on GitHub.
github.com
(본문의 함수문제풀이 깃허브 링크)
깃헙에 코딩문제푼거 모아놓는 리포지토리를 처음 만들어보았습니다
매일 허접하게 무언가 하고있긴 했는데
작게나마 기록을 남길 방법은 부끄럽지만
역시 깃헙밖에 없는듯함
(리드미 꾸미는데에 오늘 시간 다쓴듯)
잔디 자주 심어보기로 하자
1 & 2 & 3번 문제
- "안녕 내 이름은 제시카야"라는 문장을 프린트하는 함수 'greet’를 만드시오 (1번문제)
- 이름을 매개변수로 전달받아 다양한 이름을 프린트 할 수 있게 함수를 수정하시오 예) “안녕 내 이름은 에밀리야”, “안녕 내 이름은 할리야” (2번문제)
- 매개변수로 전달받은 이름을 반환하게 함수를 수정하시오 (3번문제)
<나의 풀이>
function greet (a) {
console.log("안녕 내 이름은 " + a + "야");
}
greet("연지");
//안녕 내 이름은 연지야
사실상 1,2,3번이 단계적으로 진행되어서 최종본은 이거라고 생각하면 될 듯
나처럼 이거 아는거네 하고 바로 뇌 안거치고
호다닥 쓰는 방식도 있고
다 쓰고 나중에 생각해보니
백틱을 왜 안썼나 싶었다...
그리고 다른 또 하나의 방법이 있음
백틱 사용한 풀이
function greet (a) {
console.log(`안녕 내 이름은 ${a}야`);
}
greet("연지");
//안녕 내 이름은 연지야
ES6에서 도입된 방법인데
결합연산자 '+' 안쓰고도 더 편하게 문자열과 변수를 섞어 쓸 수 있는 방법이다.
아는데 왜 안썼지? <<< ㅠㅠ익숙하지 않아서...
' , ' 쓰는 풀이
function greet (a) {
console.log('안녕 내 이름은',a,'야');
}
greet('연지');
//안녕 내 이름은 연지 야
결합연산자 말고 ' , '를 사용해서 출력하는 방법도 있다.
하다가
console.log에서의 +와 ,의 차이가 궁금해져서
찾아보았음
Why comma ' , ' and plus ' + ' log the console output in different pattern?
I am using the console.log statement for debugging , but came across a scenario where using ',' or '+' with console.log statement is logging the output in different pattern.For example (funct...
stackoverflow.com
+를 사용할 때 toString() 메소드를 불러온 상태로 log method에 전달이 되고
,를 사용할 때는 toString()을 불러오지 않고 log method에 인자 전달이 된다고 한다
[JavaScript] console.log(); 에서 '+'와 ',' 의 차이
+(string concatenation operator) with object will call the toString method on the object and a string will be returned. So, '' + object is equivalent to object.toString(). And toString on object returns "[object Object]". With , the object is passed as sep
wrkbr.tistory.com
구글에 검색해서 알았음
감사합니닷!
4번 문제
- meetAt 함수를 만들어주세요.
인자를 세개 받습니다.
첫번째 인자는 년도에 해당하는 숫자입니다.
두번째 인자는 월에 해당하는 숫자입니다.
세번째 인자는 일에 해당하는 숫자입니다.
년도 인자만 받았을 경우 → "1234년" 과 같은 형식의 문자열을 리턴 해주세요.
년도,월 인자를 받았을 경우 → 년도와 월을 조합해서 "1234년 5월" 과 같은 형식의 문자열을
리턴 해주세요.
년도,월,일 인자를 전부 받았을 경우 → 년도,월,일을 조합해서 "1234/5/6" 과 같은 형식의 문자열을
리턴 해주세요.
결과 예시
meetAt(2022); // 결과 --> 2022년
meetAt(2032, 3); // 결과 --> "2032년 3월"
meetAt(1987, 10, 28); // 결과 --> "1987/10/28"
<나의 풀이>
function meetAt(a,b,c){
if (a,b,c) {
return a+"/"+b+"/"+c;
}
if (a,b){
return a + "년 "+ b + "월";
}
if (c) {
return a + "년";
}
}
console.log(meetAt(1994,4))
다시 보니까 또 결합연산자 + 써서 풀었음
아무래도 편하니까 그런거같은데 다음부터는 백틱을 써보도록 해봐야겠다
매개변수 갯수 많은 것 부터 적어야 한다는 중요성을 다시금 상기시켜 준 문제였다.
매개변수 1개 값 넣을때부터 return이 걸려버리니까 다음 if문으로 넘어갈 수가 없기 때문
그래서 가장 매개변수 많이 써줘야 하는 것부터 순서대로 작성하면 제대로 작동한다.
나도 버벅대서 다시 순서 바꾸고 그랬었다
<코알누 공식 답>
function meetAt(year, month, date) {
let todayYear = year;
let todayMonth = month;
let todayDate = date;
if (todayDate) {
return `${todayYear}/${todayMonth}/${todayDate}`;
}
if (todayMonth) {
return `${todayYear}년 ${todayMonth}월`;
}
if (todayYear) {
return `${todayYear}년`;
}
}
console.log(meetAt(2022,1,7))
매개변수를 새 변수에 할당하고 그걸 return 하는 방식인 거 같은데
if의 조건 부분에 깔끔하게 변수 하나만 들어가는게 나한테는 신선했다.
나도 다음에 또 이런 스타일 문제 풀게되면
같은 방식으로 한번 풀어봐야겠다
5번 문제
- findSmallestElement 함수를 구현해 주세요.arr 의 값들 중 가장 작은 값을 리턴 해주세요.
- 예를 들어, 다음과 같은 배열이 인자(input)으로 들어왔다면 0이 리턴 되어야 합니다.
이용되는 배열
[100,200,3,0,2,1] - 만일 arr 가 비어있으면 0을 리턴 해주세요.
- findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.
<나의 풀이>
function findSmallestElement(arr){
if(arr) {
let arr1 = arr.sort((a,b)=>a-b)
return arr1[0]
} else if(arr == null) {
return 0;
}
}
console.log(findSmallestElement([100,200,3,0,2,1]));
// 0
나는...if밖에 모르는 바보인가보다...
그야 제일 익숙하니까 자꾸 쓰게 되는듯
사고의 흐름
입력값의 type : array
출력값 type : number
가장 작은 값을 return 한다고 했는데
최근에 써봤던 sort() 메소드를 이용해서 오름차순으로 정렬 후에
인덱스번호 0번을 출력하면 되겠다고 생각했다.
(아주 단순하게 생각한듯 ㅋㅋ)
그리고 매개변수가 하나도 없을 때 0이라는 숫자 출력이니까
조건을 걸기 위해서 if-else문을 사용했음
null과 일치하는지를 판단해서 return 0 하게 해주었다.
결과는 아주 잘 나왔음!
<코알누 공식 답>
function findSmallestElement(arr) {
let result = arr[0];
if (arr.length === 0 ) {
return 0;
}
for (let i = 1;i < arr.length; i++){
if(result > arr[i]){
result = arr[i];
}
}
return result;
}
let smallestNumber = findSmallestElement([100,200,3,0,2,1])
console.log(smallestNumber)
값 하나를 기준으로 두고,
for문으로 순회하면서 결과값이 요소보다 더 크다면
비교해보고 요소를 return하는 방식인데
나는 그렇게는 생각도 못해서 이런 방법도 있구나 했음
for문 활용 사례를 많이 찾아봐야겠다
6번 문제
- 돈을 매개변수로 받으면 몇개의 지폐와 동전이 필요한지 최소 개수를 계산해주는 함수를 만드시오
- 12300인 경우 출력예 )
50000 X 0
10000 X 1
5000 X 0
1000 X 2
500 X 0
100 X 3
이게 제일 고민 많이했고
if문 쓰는 습관 탈피하려고
많이 생각하고 시간도 더 걸렸다
나는 어렵다고 느끼는 문제 풀면 그게 ㄹㅇ 수면제가 따로없는데
그럼 사실상 자는 시간이 더 많았....?
사고의 흐름
for문 각이다 생각했음
(근데 자주 써보질 않아서 아직 머릿속에서 말끔하게 정리는 안되는 것 같다)
<나의 풀이>
let num = [50000, 10000, 5000, 1000, 500, 100]
function moneyCalc(money){
for(let i=0;i<6;i++){
let calc1 = Math.floor(money/num[i])
money = money - num[i]*calc1
console.log( num[i],' X ', calc1 )
}
}
moneyCalc(15000)
코드를 쓸 때는 일단 console.log로 모양부터 찍어주고나서
나중에 calc1 부분을 계산했다.
먼저 나누고 난 뒤
계산된 값은 매개변수에서 빼주는 아이디어를 떠올리는데 좀 오래걸렸던 것 같음
이거 나중에 생각해보니 진짜 별거 아니었는데
뭣때문에 뇌가 받아들이지 못해서 그랬는지 의문이다...
아마 머리로는 방법을 알고있어도
그것을 수식으로 표현하기가 어려워서였는듯
항상 겪는 문제지만
꾸준히 하다보면 언젠가는 저도 자바스크립트 대현자가 될 수 있겠죠?
'개발관련 > JavaScript' 카테고리의 다른 글
[Programmers] Lv.0 배열의 평균값 (Javascript) (0) | 2023.02.23 |
---|---|
[Programmers] Lv.0 짝수와 홀수 (Javascript) (0) | 2023.02.22 |
[VScode] 'let' is available in ES6 (use 'esversion: 6')..... 오류 해결하기 (0) | 2023.02.20 |
[Programmers] Lv.0 중앙값 구하기 (Javascript) (0) | 2023.02.16 |
[Programmers] Lv.0 옷가게 할인 받기 (Javascript) (0) | 2023.02.16 |