안녕하세요 회원 점수에 의해서 그 회원의 래밸을 정할려고 합니다.
회원 점수는 게시판 글쓰기, 출석 등등으로 올라가게 됩니다.
근데 여기서 회원 래밸이 1~100까지로 정했는데
1래밸 : 0~10점
2래밸 : 11~20점
3래밸 : 21~30점
.
.
.
10래밸 : 91~100점 (10씩 증가)
그리고 11~20래밸부터
10래밸 : 101 ~120점
11래밸 : 121 ~ 140점
12래밸 : 141 ~ 160점
13래밸 : 161 ~ 180점
.
.
20래밸 : 281 ~ 300점 (20씩 증가)
21~30래밸 (30씩 증가)
21래밸 : 301 ~ 330점
22래밸 : 331 ~ 360점
이렇게 증가하는 공식이 있습니다. 혹시 너무 어렵게 썻는지... 걱정되네요
우선 제 머리로는 이렇게 소스를 구현 했습니다. 언어 : javascript
var score; // 점수를 담는 변수 입니다.
for (var i =0; i<10; i++){
if( (i*10) =< score && ((i+1)*10) > score){
alert("현재 래밸은 : " + (i+1)); // 조건이 만족하면 (i+1) 값이 1~10 래밸이 된다
}
}
for (var i =0; i<10; i++){
if( (i*20)+101 =< score && ((i+1)*20)+100 > score){
alert("현재 래밸은 : " + (i+11)); // 조건이 만족하면 (i+11) 값이 11~20 래밸이 된다
}
}
for (var i =0; i<10; i++){
if( (i*30)+301 =< score && ((i+1)*30)+300 > score){
alert("현재 래밸은 : " + (i+21)); // 조건이 만족하면 (i+21) 값이 21~30 래밸이 된다
}
}
for (var i =0; i<10; i++){
if( (i*40)+601 =< score && ((i+1)*40)+600 > score){
alert("현재 래밸은 : " + (i+31)); // 조건이 만족하면 (i+31) 값이 31~40 래밸이 된다
}
}
--------------------------------------- 이런식으로 10개를 작성후 공통적인 for ( var i=0 ; i<10; i++)를 묶어
for (var i =0; i<10; i++){
if( (i*10) =< score && ((i+1)*10) > score){
alert("현재 래밸은 : " + (i+1)); // 조건이 만족하면 (i+1) 값이 1~10 래밸이 된다
}
if( (i*20)+101 =< score && ((i+1)*20)+100 > score){
alert("현재 래밸은 : " + (i+11)); // 조건이 만족하면 (i+11) 값이 11~20 래밸이 된다
}
if( (i*30)+301 =< score && ((i+1)*30)+300 > score){
alert("현재 래밸은 : " + (i+21)); // 조건이 만족하면 (i+21) 값이 21~30 래밸이 된다
}
if( (i*40)+601 =< score && ((i+1)*40)+600 > score){
alert("현재 래밸은 : " + (i+31)); // 조건이 만족하면 (i+31) 값이 31~40 래밸이 된다
}
.
.
.
.
.
if( (i*100)+3501 =< score && ((i+1)*100)+3500 > score){
alert("현재 래밸은 : " + (i+91)); // 조건이 만족하면 (i+91) 값이 91~100 래밸이 된다
}
}
이렇게 했습니다. 음... 최대한 줄이긴 줄인건데.. 혹시 여기서 좀더 줄일수가 있을까요?
javascript지만 연산하는건 C나 C++와 비슷하다고 생각합니다.
0~9까지는 공통으로 되서 묶었고 그다음에 증가되는게 +0 , +100 , +300 , +600 , +1000, +1500 , +2100 이렇게
0 100 200 300 400 500 600 700 800 900 1000 씩 더하는 규칙
i * 10, i * 20 , i * 30 이렇게 10*(1~10) 까지의 규칙을 생각하여
for문 안에 for문을 열어보았습니다.
var add=0;
for (var j =0; i<10; j++){
for (var i =0; i<10; i++){
if( (i*((j+1)*10))+add =< score && ((i+1)*((j+1)*10))+add > score){
alert("현재 래밸은 : " + ( i+ ((j*10+1)) ); // 조건이 만족하면 0~100까지 출력된다
}
add = add + (100 * j);
}
-----------------------------------------------------------
제 머리로는 이게 한계이며 현재 사정때문에 이걸 직접 돌리지 못하니 이 조건이 맞을지도 의문이 드네요....
복잡 할지 몰르나ㅠㅠ 오유님들 조언좀 듣고 싶습니다. 과연 이렇게 돌려도 조건이 잘 될까요?
그리고 잘 된다 하면... 여기서 좀더 줄이는 방법은 없을까요?
조언 부탁드립니다