문제
숫자 2개가 주어질 때, 두 숫자 사이의 값을 구하는 코딩 테스트 문제를 풀었다.
풀긴 풀었는데, 반복문을 많이 써서 그리 좋은 방법은 아닌것 같다.
나는 코딩테스트를 보고 난뒤 항상 다른사람이 푼 풀이를 보는데, 더 좋은 방법이 있어서 오늘이ㅡ
TIL로 올릴려 한다.
시도한 것
function solution(a, b) {
var answer =0;
for(let i = Math.min(a,b); i < <Math.max(a,b);i++){
answer += i;
}
return answer;
}
나는 간단하게 for문을 돌면서 시작 인덱스에는 두 값에 최소값을, 비교문에는 최댓값을 넣어서 계산을 했다.
나름 참신한 방법이라고 생각을 했는데, 더 좋은 방법이 있는거 같다.
해결 방법
function solution(a, b) {
return (a+b)*(Math.abs(b-a)+1)/2;
}
이걸 처음보고 이게 뭐지....?? 라고 했는데 가우스 계산식이라고 한다.
수학시간에 배운거 같긴도 한데.... 수학을 안한지 오래되서 까먹은 듯 했다.....
위 그림을 보면, 양쪽끝 숫자끼리 더하면 결국 같은 값이 반복해서 나온다. 이걸 토대로 공식화 한게 가우스 계산법이다.
(a + b) : 양쪽 끝 값을 더한값.
(Math.abs(b-a) +1) : 절대값을 사용한 이유는, 범위의 시작 값이 높은 값이 나올 수 도있기 때문에 사용했다. ex) a : 5, b : 2
(b-a) +1 은 구할려는 사이 값들의 갯수이다.
1/2 : 나누기 2를 하는건 2개가 한 쌍을 이루기 때문이다.
다음과 같이 사용하면 시간 순회도가 엄청나게 줄어든다.
알게된 것
매번 느끼는 거지만 코딩테스트 후에는 꼭 다른사람이 한 풀이를 보는 것을 추천한다. 아니 그냥 봐야된다.
그냥 보고 있으면 신기하다. 볼만하다. 재밌다.
이걸 안까먹는게 중요한데.... 나처럼 그냥 박제를 해라 그러면 까먹어도 다시보겠지...
참조
'TIL' 카테고리의 다른 글
프로그래밍 기초03 (구조 분해 할당) (0) | 2023.02.16 |
---|---|
프로그래밍 기초 02(배열과 메서드) (1) | 2023.02.15 |
프로그래밍 기초01(항해99) (0) | 2023.02.14 |
동적 Element 생성시 함수인자 따옴표 (0) | 2023.02.09 |
Git push 오류 (Updates were rejected because ..) (0) | 2023.02.08 |