https://programmers.co.kr/learn/courses/30/lessons/12912
문제
두 정수 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의 대소관계는 정해져있지 않습니다.
결괏값 예시
a | b | return |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
기본 제공 틀
function solution(a, b) {
var answer = 0;
return answer;
}
풀이 [JavaScript]
가장 처음에는 아래와 같이, 두 값의 크기를 비교해서 각각의 케이스에 맞게 for문을 돌도록 구조를 짰었다.
하지만 이 구조는 효율적이지 못한것 같아 다시 수정해보았다.
function solution(a, b) {
var sum = 0;
if( a >= b ){
for ( var i = b; i <= a; i++ ){
sum += i;
}
}else{
for ( var j = a; j <= b; j++ ){
sum += j;
}
}
return sum;
}
아래는 for문을 한 번만 사용하기 위해, 삼항연산자를 이용하여, start값과 end 값을 a, b의 크기에 따라 알맞게 지정해주었다.
하지만 이렇게 쓰는 삼항연산자는 본래의 삼항연산자의 사용 목적과 다르다는 것을 알게되었다.
본디 삼항 연산자는, 앞에 값을 대입하기 위하여 사용하는 것인데, 나는 if, else문을 사용해도 되는 것을 굳이 삼항연산자로 쓴 것이기 때무문에 잘못된 사용방법이었다.
앞에 값을 대입하기 위한다는 것은, var verifiedValue = a > 10 ? 'verified': 'invalid'와 같이, 조건문에 맞게 값을 앞부분에 대입하기위해 삼항연산자를 쓴다는 것이다.
function solution(a, b) {
var sum = 0;
var start = 0;
var end = 0;
a >= b ? (start = b, end = a) : (start = a, end = b);
for(var i = a; i <= b; i++){
sum += i;
}
return sum;
}
그래서 다시 아래와 같이 a와 b의 값을 비교해서 a가 더 큰 경우에는 a, b값을 서로 바꿔주도록 수정해보았다.
자바스크립트에서는 a, b값을 바꾸는 더 간단한 방법이 있어 그 방법을 추가적으로 적용해보았다.
function solution(a, b) {
var sum = 0;
if(a >= b){
var tmp = a;
a = b;
b = tmp;
}
for( var i = a ; i <= b; i++){
sum += i;
}
return sum;
}
아래는 a가 b보다 클 경우, a, b를 바꾸는 방식인데, 자바스크립트에서는 아래와 같이 간단하게 [a, b] = [b, a];와 같은 방식으로 값을 바꿀 수 있다. 그래서 a값이 큰 경우, a와 b값을 스왑해주고 작은 값에서부터 큰 값까지의 value를 합해주면 원하는 결과값이 나오는 것을 확인할 수 있다.
function solution(a, b) {
var sum = 0;
if( a >= b ) [a, b] = [b, a];
for(var i = a; i <= b; i++){
sum += i;
}
return sum;
}
채점 결과 [JavaScript]
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] 핸드폰 번호 가리기 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
---|---|
[프로그래머스 스킬체크 레벨 1] 하샤드 수 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] x만큼 간격이 있는 n개의 숫자 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] 수박수박수박수박수박수? 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.13 |
[프로그래머스 스킬체크 레벨 1] 제일 작은 수 제거하기 문제 풀이 및 설명 - 자바스크립트[JAVASCRIPT] (0) | 2021.07.12 |
댓글