프로그래머스) 두 정수 사이의 합

minji jeon·2022년 7월 18일
0

알고리즘

목록 보기
12/29
post-thumbnail

1. 문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.

2. 접근

다양한 방법이 있을거 같은데 당장 생각나는 방법은
반복문이니 for문을 돌리고
합을 구하는 문제이니 += 를 이용하여 합을 구할 수 있을거 같다.

개인적으로
for문을 돌리는 i자체 숫자를 a부터 b까지 돌릴수도 있다.
이생각은 for문을 아는사람이라면 누구나 알수 있는 내용이지만 나는 전혀생각하지 못했다.

3. 내답

function solution(a, b) {
let result1 = 0
let result2 = 0
let result3 = 0

if (a > b){ 
    for (let i = 0 ; i < b; i++){
 result1 += i  };
for(let i = 0 ; i < a ; i ++){
    result2 += i }
;
   result3 = result2-result1}else { for (let i = 0 ; i < b; i++){
 result1 += i};
for(let i = 0 ; i < a ; i ++){
    result2 += i }
;
   result3 = result1-result2
       
   }

  return result3
        }

보기만 해도 현기증이 난다...... 이식이 틀릴수가 없는데 꼬여서 계산도 틀리게된다... 그래서 다른방법을 구글링한 결과
두번째 방법을 알수있게 되었다.

function solution(a, b) {
  let result = 0;
  
  if (a <= b) {  //a가 b 이하일 때
    for (let i = a; i <= b; i++) {
      result += i;
      // result = result + i
      // 반복문이 돌면서 result 값을 증가시켜줌
      // 1 번 반복 : result = 0 + 3 >> result = 3
      // 2 번 반복 : result = 3 + 4 >> result = 7
      // 3 번 반복 : result = 7 + 5 >> result = 12

    }
  } else {
    for (let j = b; j <= a; j++) {
      result += j;
    }
  }
  return result;
}

이렇게 i의 범위를 a와 b로 정해준 뒤 그 사이값을 모두 더하는 방식이다.
매일 사용하는 for문인데 아 왜 이생각을 못했지 어의가 없다.....

4. 남의답 : 이건 내가 풀수있는 경지가 아닌거같다.

가우스의 답안
양 끝의 합 * 양 끝의 합의 개수

function adder(a, b){
   var result = 0
   //함수를 완성하세요

//abs = 양수구하는 함수
   return (a+b)*(Math.abs(b-a)+1)/2;
}

최댓값구하기

function adder(a, b, s = 0){
    for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
    return s;
  }

for문의 i값을 math함수를 이용해 최솟값으로 설정하고 최댓값까지 돌도록 한뒤
그 i값을 += 계속 누적하도록 하였다.

오늘의 깨달음

무심코 지나치는 반복문의 조건을 잘 이용하자!!!

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글