첫 주가 끝나간다!
오늘도 알고리즘!
function solution(absolutes, signs) {
let a = 0;
let b = 0;
let sum = 0;
for(let i=0; i<absolutes.length; i++) {
a = absolutes[i]*(signs[i]-1)
b = absolutes[i] + a
sum += a
sum += b
} return sum
}
true와 false가 1과 0인 점을 이용해 absolutes에 signs[i]-1([0,-1,0])을 곱해 음수가 담긴 배열 a를 만들고, absolutes에서 음수의 배열인 a를 더해 양수가 담긴 배열 b를 만들어 모두 더해주었다... 더 개선이 가능할 것 같은데 너무 지저분하게 짜놨다. ㅠ
function solution(arr) {
let answer = 0;
let a = 0;
for (let i = 0; i < arr.length; i++) {
a += arr[i]
}
answer = a/arr.length;
return answer
}
배열 arr의 데이터를 arr의 길이만큼 반복해서 더해주고, 이를 다시 arr배열의 길이로 나누어 평균값을 구해줌.
function solution(phone_number) {
let answer = '';
let star = phone_number.slice(0,-4);
answer = phone_number.replace(star, '*'.repeat(star.length));
return answer;
}
phone_number의 뒷 4자리만을 남겨놓고 잘라내기 위해 slice()를 사용.
4자리를 남기고 잘라낸 숫자를 *표시로 변경 - 한 글자마다 하나의 별로 변환하기 위해 별의 갯수를 잘라낸 숫자의 길이star.length만큼 반복하여 재배치한다. -
.slice(start,length) : start로부터 length까지의 숫자를 잘라 꺼내 새로운 배열을 생성한다. 원본 배열은 변경되지 않는다. b를 작성하지 않고 a 로부터 배열의 끝까지를 추출함. 음수를 사용해 배열의 뒷자리부터 인덱스를 셀 수 있음. (문자열에도 적용이 가능.)
비슷한 기능을 하는 메소드로 substr substring 등이 있으나, substr은 더이상 권장되지 않고, substring은 음수 사용이 불가능하다.
function solution(arr1, arr2) {
let answer = [];
for (let i = 0; i < arr1.length; i++) {
let sum = [];
for (let j = 0; j < arr1[i].length; j++){
sum.push(arr1[i][j]+arr2[i][j]);
// console.log(sum)
}
answer.push(sum);
}
return answer;
}
와 이건 결국 못 풀어서 다음날 뒤늦게 풀고 추가함.
arr1과 arr2의 각 항 속 항의 합을(ㅋㅋ) 구하기 위해 반복문을 중첩시켜 arr의 각 항, 그리고 arr의 각 항 속의 각 항을 꺼내 합하는 방식. 첫번째 반복문에 비어있는 새 배열 만들어 여기에 계속 항의 숫자를 더한 값을 push한다.
주석처리된 위치에서 새 배열sum을 출력해보면 한 번 반복문이 돌 때마다 [4] -> [4,6] 같은 방식으로 sum에 누적되어 들어가는 것을 볼 수 있다. arr[i]의 길이는 2이므로, [4,6]까지 출력과 삽입을 반복한 뒤 멈추고, answer 배열에 삽입되어 [[4,6]]과 같은 모습이 되는데, 여기서 다시 i=1일 경우의 j반복문이 돌아 또 [7] -> [7,9] 같은 결과물을 내놓는다. 이 배열을 또 answer에 삽입하면 [4,6]의 뒤로 [7,9]가 삽입되어 [[4,6],[7,9]] 와 같은 결과물을 얻을 수 있다.
function solution(x, n) {
var answer = [];
for (let i=0; i<n; i++) {
answer.push(x+x*i)
}
console.log(answer)
return answer;
}
x라는 공차를 가진 n항의 등차수열을 만드는 문제.
answer라는 빈 배열이 x를 n항이 될때까지 더하며 삽입한다.
.push(a) : 배열의 끝에 요소 a를 삽입.
function solution(price, money, count) {
let total = 0;
total = (price+price*count)/2*(count);
if(total>money) {
return total-money
} else {
return 0
}
}
또차수열...!
(첫 가격 + 마지막 가격)/2 * (탄 횟수) 로 내야하는 총 금액을 구한 뒤,
지갑에 있는 금액과 내야하는 금액의 상태에 따라 조건문을 돌려 출력한다.
내야하는 금액total이 지갑 속의 금액money보다 큰 경우, total-money로 부족한 금액을 출력.
그 외의 경우(money>total, money=total)엔 문제의 조건대로 0을 반환한다.
for...in문
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Loops_and_iteration#for...in_%EB%AC%B8
for...of문
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_%EB%AC%B8
해야 할 일
WIL 작성
못 푼 문제 다시 풀어보기
약속 다녀온 뒤에 강의도 좀 들어야겠다... ㅠ. ㅠ
알고리즘 이틀차...
난이도 중하로 넘어오니까 생각만큼 잘 되지가 않아서 너무 속상ㅡ ㅜ...!!!
그리고 velog 줄바꿈 너무 불편해