📘 오늘의 공부
- 알고리즘 코드카타 - repeat() 메서드
- 리액트 입문강의 2회독 - 구조분해할당
문제 : 수박수박수박수박수박수?
<문제 설명>
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
<제한 조건>
n은 길이 10,000이하인 자연수입니다.
풀이 : repeat()
메서드 사용
function solution(n) {
// n이 짝수이면 (수박 * n/2)
// n이 홀수이면
// 1) n=1이면 (수*1)
// 2) n>1이면 수박*(th.floor(n/2)) + 수
let watermelon = '수박'
let half_watermelon = '수'
if (n%2 === 0) {
let answer1 = watermelon.repeat(n/2);
return answer1;
} else if (n === 1) {
return half_watermelon;
} else {
let answer2 = watermelon.repeat(Math.floor(n/2)) + half_watermelon;
return answer2;
}
}
'문자열'.repeat(n)
문제 : 내적
<문제 설명>
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
<제한사항>
a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
풀이
function solution(a, b) {
// for문으로 a[i]*b[i]를 반복하는 새로운 배열 만들기
// reduce로 배열 요소 다 더하기
let Arr = [];
for(let i = 0; i < a.length; i++) {
Arr.push(a[i]*b[i]);
}
let answer = Arr.reduce((a,b) => a+b);
return answer;
}
더하기 할당 연산자 +=
를 사용하여 for문 안에서 끝내기function solution(a, b) {
var sum = 0;
for(var i=0; i<a.length; i++){
sum += a[i]*b[i]; // reduce 대신 이 부분 작성
}
return sum;
}
reduce()
메서드의 제대로된 활용!function solution(a, b) {
var answer = a.reduce((acc, cur, idx) => acc += cur*b[idx], 0)
return answer;
}
(객체, 배열의 비구조화(destructuring))
1. 객체의 구조분해할당
객체의 value들을 출력할 수 있게 해줌
key들을 변수 이름으로 가져옴
key를 변수 이름으로 가져와서 객체{}
로 묶기
그 객체의 할당 값은 바로 원 객체의 이름!
예시
const obj = {
name: 'judy',
age: '20',
};
// 객체를 구조분해할당 하기
const {name, age} = obj;
// name, age(key)는 변수 이름이 되고, 그 변수를 부르면 해당 value가 출력된다!
console.log(name) // 'name'
console.log(age) // '20'
2. 배열의 구조분해할당
배열의 요소들을 출력하게 해줌
변수 이름은 임의 지정
변수 이름의 위치와 같은 위치의 배열 요소가 출력됨
const arr = [1, 2, 3];
// 배열을 구조분해할당 하기
const [one, two, three] = arr;
// one, two, three는 변수 이름이 되고, 해당 위치의 배열 요소가 출력된다!
console.log(one) // 1
console.log(two) // 2
console.log(three) // 3