코딩테스트(JavaScript) 프로그래머스 : 두 정수 사이의 합

Parkboss·2022년 9월 16일
0

코딩테스트

목록 보기
10/19

✅문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

❕ 제한사항

a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

📢 입출력 예제

문제를 풀지 못했다... 예제 중에 두 개만 맞고 하나는 맞지 않았다 ... 그리고 제출에서 계속 통과가 되지 않았다 그 이유는 정말 어이없게 문제를 풀었기 때문이다^^


💻 다른 사람 풀이

function solution(a, b) {
  var answer = 0;
  //3가지 경우의 수로 나눠서 if문을 구성하였다.
  if (a > b){
    for(let i = 0; i <= a-b; i++){
       answer += b+i;
      // a-b = 2다.
      // 0 = 3+0 = 3
      // 3 = 3+1 = 4
      // 4 = 3+2 = 5
      // 12 = 3+ 4+ 5 = 12
    }
  } 
  else if (a == b){
    answer = a;
  } 
  else if (a < b){
    for(let j = 0; j <= b-a; j++){
      answer += a+j;
    }
  }
    return answer;
}

나의 문제점

  1. for 문을 돌릴 생각을 안 했다.
  2. answer += b+i; 값을 할당하는 개념이 아직 부족하다...

💻 다른 사람 풀이 2

function solution(a, b) {
    var answer = 0;
    let num = [];
    if (a === b) {
        answer = a;
    } else {
        num.push(a,b);
        num.sort((a,b)=>a-b); // 오름차순 정렬
        for (let i=num[0]; i<num[1]+1; i++) {
            answer += i
          // i = 3, 3 < 6 은 true이기 때문에 answer = 0+3 = 3
          // i++증감이 되고 i = 4, 4 < 6 은 true이기 때문에 answer = 3+4 = 7
          // i++증감 되서 i = 5, 5 < 6 은 true 이기 때문에 answer = 7+5 = 12
          // 6 < 6 은 false여서 for문 종료!
        }
    }
    
    return answer;
}

이 문제 풀이도 굉장히 신박한 방법이다.

  • a부터 b까지 순차적으로 for 문을 돌리기 위해, a와 b를 담을 빈 배열을 만든다.
    num=[]
  • a와 b가 같을 경우와 다를 경우의 조건식을 만든다.
    같으면 a를 반환하고 다르면 num 배열에 넣어준다.
  • 예제 3번은 a>b의 경우는, 이럴 경우 for 문에서 시작 값을 a로 하면 기댓값이 나오지 않는단다.
    작은 수부터 시작하여 더해야 하기 때문에, num 배열의 요소들을 오름차순 정렬해 준다.
    이 부분에서 정말 좋은 생각이라고 생각했다.
  • num.push를 하여 (a, b) 배열을 만들어주고 sort를 하여 ab를 하면 [3,5]로 오름차순 정렬이 된다.
  • for 문에서 num[0]는 3이다. num[1]는 5이다. let i = 3; 3 < 6 이 된다.
  • 여기서 또 나의 answer += i를 이해를 못 해 하나하나 적어보면서 풀었다.
profile
ur gonna figure it out. just like always have.

0개의 댓글