누적합 구하기 원리
*현재 누적 합 = 과거 누적합 + 현재 대상값. ( K = K + N)
최초의 상황일 때 과거 누적합이 없기 때문에 최초 가상 누적합에 의미없는 수(0)를 넣어 선언.
누적합에 해당하는 변수선언 , 현대 대상값에 해당하는 변수 선언,
최초 가상 누적합에 초기화.가 필요함을 알수 있음.
'use strict';
// 1부터 10 까지의 누적합을 입력받아 출력해보자.
let tot =0 , min, max; //최초 가상 누적합
min= +prompt(`작은값 : `);
max= +prompt(`큰값 : `);
for (let i = min; i <= max; i++) {
tot = tot + i ;
}
alert(`${min} 값 부터 ${max} 값의 누적합은 ${tot}`);
최소값을 최대값까지 반복하게 될것이고,
합계를 저장할 저장공간을 마련한다.
최초의 가상누적합이 존재하지 않기 때문에 0의 의미없는 수를 넣어서 선언.
시작 : 최소값 / 끝 : 최대값 / 시작값을 1씩증가하면서 더할거야.
재료준비가 완료되었다면 for문을 준비할 수 있다.
tot이라는 합계를 저장할 저장공간에 차곡차곡 최소값을 1씩 증가시키며 더하면 누적합을 구할 수 있다.
최대값, 최소값 구하기 원리
70 30 90 40 50 의 최대값 최소값을 구해보자.
우리 머리속에서 70과 30을 비교하고 , 다음 그 값과 90을 비교하는 순차적인 원리이다.
두가지 방법이 존재한다.
- 범위가 확인 가능할 때 ( 최초 n 의 선언 ) 0~100까지의 범위야
-최초 가상 과거 최대값을 범위에서의 최소값. n = 0
처음 비교했을 때 최대값이 현재 대상값이 되어야만 하기 때문에 현재 대상값(70) 보다 작아야함.
-최초 가상 과거 최소값을 범위에서의 최대값. n = 100
- 처음이나 마지막 요소가 확인 가능할 때
최초 가상 과거 최대값 또는 최소값이 처음 요소.
n=70
따라서 범위가 확인가능할때는 범위를 지정하여 최초 가상 과거 값을 한번 더 지정하기 때문에
처음이나 마지막 요소가 확인 가능할 때 보다 비교를 1회 더 하게 됨을 알 수 있다
-범위가 확인 가능할 때
//최대값, 최소값 구하기
// 점수가 0점부터 100점 사이.
let max = 0, min = 100,
sc;
for (let i = 0; i < 5; i++) {
sc = +prompt(`${i+1} 번째 학생 점수 :`);
if (sc > max) {
max = sc;
}
if (sc < min) {
min = sc;
}
}
alert(`최대값 ${max} ,최소값 ${min} `);
-범위를 알 수 없을때
'use strict';
//최대값, 최소값 구하기
// 범위를 알 수 없을 때 처음 값을 최대값과 최소값을 넣고 1회 적게 반복.
let max,min,
sc;
min = max = +prompt(`1번째 학생 점수 :`);
for (let i = 1; i < 5; i++) {
sc = +prompt(`${i+1} 번째 학생 점수 :`);
if (sc > max) {
max = sc;
}
if (sc < min) {
min = sc;
}
}
alert(`최대값 ${max} ,최소값 ${min} `);
메서드함를 통한 쉬운 방법.
'use strict';
// 메서드 함수로 최대값 최소값 찾기.
//최대값, 최소값 구하기
// 범위를 알 수 없을 때 처음 값을 최대값과 최소값을 넣고 1회 적게 반복.
let max,min,
sc;
min = max = +prompt(`1번째 학생 점수 :`);
for (let i = 1; i < 5; i++) {
sc = +prompt(`${i+1} 번째 학생 점수 :`);
max = Math.max(sc, max);
min = Math.min(sc, min);
}
alert(`최대값 ${max} ,최소값 ${min} `);
Math,max() 는 내부의 가장 큰 요소를 저장하게됨.
console.log.(Math.max(70, 30, 15, 20, 78));
Math,min() 는 내부의 가장 큰 요소를 저장하게됨.
console.log.(Math.min(70, 30, 15, 20, 78));
거듭제곱 구하는 원리
거듭제곱도 순차적으로 계산하는 누적합 구하는 원리와 같다.
아래 예제를 통해 살펴보겠다.
//밑수 , 지수 // 밑수 의 지수 승은 ? //음수 입력일 경우 앞으로 재입력 구현. //입력값이 1이상.
'use strict';
let num,sub ,result ;
while(1){
num = +prompt(`밑수 :`);
if (num<0) {
alert(`음수가 입력되었습니다. 재입력 바랍니다.`); continue;
}
sub = +prompt(`지수 :`);
if (sub<0) {
alert(`음수가 입력되었습니다. 재입력 바랍니다.`); continue;
}
result = num ; // 2
for (let i = 1; i < sub; i++) {
result = result * num;
}
alert(`${num}의 ${sub}승은 ${result}입니다`); break;
}
추후에 이 예제는 다시 다뤄보겠다.
코드의 간결화가 가능하다는것을 추후에 알게 되었는데 ,
가장 중요하게 생각할 것은 먼저 걸러내 처리할것과 ,
공통적인 부분을 어떻게 묶어나갈것인가에 대한 고민이 필요하다는 것이다.
아직은 나의 견해가 짧고 세상에 무궁무진한 방법들에 매번 놀라고 있다.
많은 코드들을 보고 이해하다 보면 , 나도 언젠가 생각의 폭이 넓어지지 않을까?
'Developer > JavaScript' 카테고리의 다른 글
예제로 만나보는 자바스크립트 (0) | 2024.05.30 |
---|---|
자바스크립트 가볍게 알아보는 == 와 === / 값의 부정평가(!) (0) | 2024.05.16 |
자바스크립트의 반복문(for / while / do..while) (0) | 2024.05.16 |
자바스크립트 , 조건문 if 와 switch (0) | 2024.05.16 |
자바스크립트 , backtick(``) / 자리 표시자 ${} /prompt / alert/ confirm (0) | 2024.05.16 |