TIL 230407 백엔드 알고리즘 풀기
1.
//정수 n(별 갯수), m(라인 갯수)로 직사각형 별 만들기
const star = [];
for (let line = 0; line < 3; line++) {
for (let i = 0; i < 5; i++) {
star.push("*");
}
star.push("\n");
}
console.log(star.join("")); //문자화시킴
2.
//짝수 , 홀수 구분하기! 출력을 어떻게 하는지 다시 한번 연습하기
var num = 3;
function solution(num) {
var answer = "";
if (num % 2 == 0) {
return (answer = "Even");
} else {
return (answer = "Odd");
}
return answer;
}
console.log(solution(num));
3.
//가운데 글자 가져오기! 짝수일 경우 가져와야되는 것을 수학적 공식으로 이해하지 못하면 풀지 못하는.. 문제.. 수포자는 힘들다..
var s = "abceds";
function solution(s) {
var answer = "";
if (s.length % 2 == 0) {
answer = s[s.length / 2 - 1] + s[s.length / 2];
} else {
answer = s[Math.floor(s.length / 2)];
}
return answer;
}
console.log(solution(s));
4. 이것도 수학공식 이해 못하면 못풀음..
어려웠던 점: a,b라는 정수 값을 비교할 때 경우의 수다!
해결: 두 값을 비교할때 경우의 수는 a>b, a=b, a<b 이므로 if else로 충분히 구현 가능 하다는 점.***
//두 정수 사이의 합 구하기
//a가 큰지 b가 큰지 모르는 상황에서 a 와 b값을 구해야함
//예를 들어 a=5, b=10의 상황에서 a,b값을 비교하려면,
//a,b값을 비교할때 경우의 수는?
//a>b, a=b, a<b 즉 a>=b의 조건과 a<b의 식으로 풀 수 있음!!
var a = 5;
var b = 3;
function solution(a, b) {
var answer = 0;
if (a >= b) {
for (let i = b; i <= a; i++) {
answer += i;
}
} else {
for (let j = a; j <= b; j++) {
answer += j;
}
}
return answer;
}
console.log(solution(a, b));
7. 꼭 질문할 것
어려웠던 점: 여기서 [4,7,12]가 각각 [true, false, true]임을 지정할 필요는 없는건가?
필요 없다면 그것은 매개변수가 (absolutes, signs)로 들어가서인가 아니면 열의 갯수가 같아서인가?
해결: 함수의 매개변수로 이미 absolutes와 signs 배열이 전달되고 있기 때문에, 함수를 호출할 때 이 두 배열을 인자로 전달해주면 됩니다. 따라서, console.log(solution(absolutes, signs))에서 absolutes와 signs를 [4, 7, 12]와 [true, false, true]로 이미 할당했으므로, 함수 호출 시에 다시 지정해줄 필요는 없습니다.
//음양 더하기
//absolutes- 정수배열 signs-매개변수
//signs[i]가 참이면 absolutes[i]가 양수, 아니면 음수
var absolutes = [4, 7, 12];
var signs = [true, false, true];
function solution(absolutes, signs) {
//return해야 하는 answer 생성
var answer = 0;
for (var i = 0; i < 3; i++) {
if (signs[i] === true) {
answer = answer + absolutes[i];
} else if (signs[i] === false) {
answer = answer - absolutes[i];
//값이 false인 경우 -음수
}
}
return answer; //이건 ab 배열을 다 돌았을때 나오는 값
}
console.log(solution(absolutes, signs));
10. 다차원 배열끼리 더해서 값을 내는 문제
어려웠던 점: for문으로 각 항의 요소를 지정하는 개념과, push의 개념이 익숙치 않아 힘들었다.
해결하기 위한 노력: arr[i]는 각각 [1,2],[2,3]을 가리킴. 즉 arr[i][j]는 [1,2],[2,3]의 요소, 비로소 숫자 그 자체를 가리키는 것을 파악. 원하는 결과의 형태로 새로운 배열을 반환하는 경우 push를 써준다는 점 꼭 기억하기. 꼭!
let arr1 = [
[1, 2],
[2, 3],
];
let arr2 = [
[3, 4],
[5, 6],
];
function solution(arr1, arr2) {
var answer = [];
// 같은 인덱스의 값 더하기
for (let i = 0; i < arr1.length; i++) {
// [1, 2] [3, 4]
let sum = [];
for (let j = 0; j < arr1[i].length; j++) {
sum.push(arr1[i][j] + arr2[i][j]);
}
answer.push(sum); //answer에 push(sum)을 할당해주고,
}
return answer; //불러와야함
}
console.log(solution(arr1, arr2)); //[[4,6],[7,9]]
12.
어려웠던 점: 은 없었으나 함수에서 합을 구한다던지, 논리연산자를 쓰는 것이 익숙치 않았다.
해결하기위한 노력: 숫자의 합을 구할때는 항상 결과값을 0으로 지정하는 것에 더욱 집중함.
return money>total? 0:total-money <논리연산자의 결과 값이 저렇게 들어 갈 수도 있다.
var price = 3; //이용금액
var count = 4;
var money = 20; //4번 타고 싶음 --> 3+6+9+12 =30
//n번째 이용: 이용료*n
//1. 4번 타고싶을때의 금액을 먼저 구하고 그 금액에서 갖고있는 금액을 뺌.
function solution(price, money, count) {
let total = 0;
for (let i = 1; i <= count; i++) {
total += price * i; // 3 + 6 + 9
}
return money > total ? 0 : total - money; //논리연산자 써보기..
// if (money >= total) {
// return 0;
// } else {
// return total - money;
// }
}
console.log(solution(price, money, count));
// return money > total ? 0 : total - money
14.
어려웠던 점: 역시 push에 익숙하지 않음
해결: push로 함수식을 거쳐서 나온 arr[i]를 넣어서 새로운 배열을 생성한다는 의미에 집중하기.
var arr = [5, 9, 7, 10];
var divisor = [5]; //result 는 5,10
function solution(arr, divisor) {
var answer = [];
for (let i = 0; i < 4; i++) {
if (arr[i] % divisor == 0) {
answer.push(arr[i]);
}
} //여기까지 배열이 나왔고, 그 배열에 값이 아무것도 나오지 않았다면, 즉 나눠떨어지는것이 한개도 없었다면,
if (answer.length == 0) {
answer.push("-1");
}
return answer.sort((a, b) => a - b);
}
console.log(solution(arr, divisor));