본문 바로가기
개발/알고리즘 풀기

TIL 230407 백엔드 알고리즘 풀기

by 코딩하는짱구 2023. 4. 7.
반응형

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));
반응형