● PRACTICE 연습문제
- 수업시간에 푼 Array(배열) 관련 연습문제 모음
위쪽은 내가 해본 코드 아래쪽은 강사님 코드 (비슷한 경우에는 한 가지만 적어둠)
Q1) 성적프로그램
        - 5명의 학생을 대상으로 평균, 등수, 과락, 평균 10점당 ☆ 한개씩, 장학생을 구한 후 
          결과값을 표작성해서 id=demo에 출력하시오
- 평균 95점 이상이면 "장학생"
- 평균 70점 이상이면 합격, 아니면 "불합격"
단, 국영수 세 과목 중에서 한 과목이라도 40점 미만이면 "재시험(과락)"
<body>
<div id="demo"></div>
<script>
    var uname = ["황대헌", "이준서", "김동욱", "곽윤기", "박장혁"];
    var kor = [100, 50, 95, 80, 60];
    var eng = [100, 55, 95, 85, 40];
    var mat = [100, 60, 35, 90, 30];
    var size = uname.length;
    //1) 평균구하기
    var aver=[];
    for(i=0; i<=4; i++){
            aver[i]=parseInt((kor[i]+eng[i]+mat[i])/3);
    }//for end
    //2) 출력하기
    var result=""; //결과값
    result += "<table border='1'>";
    result += "<tr>";
    result += "    <th>이름</th>";
    result += "    <th>국어</th>";
    result += "    <th>영어</th>";
    result += "    <th>수학</th>";
    result += "    <th>평균</th>";
    result += "    <th>등수</th>";
    result += "    <th>결과</th>";
    result += "</tr>";
    //3) 5명의 성적을 출력하기
    for(i=0; i<5; i++){
        result += "<tr>";
        result += "    <td>"+uname[i]+"</td>";
        result += "    <td>"+kor[i]+"</td>";
        result += "    <td>"+eng[i]+"</td>";
        result += "    <td>"+mat[i]+"</td>";
        result += "    <td>"+parseInt(aver[i])+"</td>";
        result += "    <td>"; //등수 start
        //4) 등수 구하기
        var rank = [1, 1, 1, 1, 1];
        for(j=0; j<size; j++){
            if(aver[i]<aver[j]){
                rank[i]++;
            }//if end
        }//for end
        result += rank[i];
        result += "    </td>"; //등수 end
        result += "    <td>"; //결과 start
        // 5) 과락 (합격, 재시험, 불합격)
        if(aver[i]>=70){
            if(kor[i]>=40 && eng[i]>=40 && mat[i]>=40){
                result += "합격";
                }else{
                    result += "재시험";
                }//if end
        }else{
            result += "불합격";
        }//if end
        // 6) 평균 10점당 *한개씩
        for(star=1; star<=parseInt(aver[i]/10); star++){
            result += "*";
        }//for end
        // 7) 평균 95점 이상이면 장학생 (강사님 코드)
        if(aver[i]>=95){
            result +="<span style='color:red; font-weight:bold'>장학생</span>";
        }//if end
        result +="    </td>"; //결과 end
        result +="</tr>";
    }//for end     
    result += "</table>";
    document.getElementById("demo").innerHTML=result;
    
</script>
</body>
↓

Q2) num배열 요소의 전체 합을 구하시오
Q3) num배열 요소 중 음수의 개수를 구하시오
Q4) num배열 요소 중 최댓값, 최솟값을 각각 구하시오
Q5) num[4] 요소의 등수를 구하시오 (클수록 순위가 높다)
Q6) num배열 요소의 각각의 등수를 모두 구하시오
var num=[7, 8, -9, -5, 6];
var size=num.length;
//Q2
var sum = 0;	//배열 요소 전체의 합
for(i=0; i<size; i++){
	sum=sum+num[i];
}//for end
//Q3
var neg = 0;	//음수의 개수
for(i=0; i<size; i++){
    if(num[i]<0){
    neg = neg + 1;
    }//if end
}//for end
//Q4 방법1(if문 활용)
var max = num[0];	//최댓값
var min = num[0];	//최솟값
for(i=0; i<size; i++){
    if(num[i] >= max){
    	max = num[i];
    }//if end
    if(num[i] <= min){
    	min = num[i];
    }//if end
}//for end
    //Q4 방법2(삼항연산자 활용)
    for(i=0; i<size; i++){
        max<num[i] ? max=num[i] : max=max;
        min>num[i] ? min=num[i] : min=min;
    }//for end
    //Q4 방법3(sort 활용)
    var newNum=num.sort(function(a, b){return b - a});                        
    document.write("최대값: "+newNum[0]+", ");
    document.write("최소값: "+newNum[size-1]+", ");
//Q5
var rank=1;	//등수
var j = 0;
while(j<size-1){
    if(num[4] < num[j]){
        place ++;
    }//if end	
    j++;       
}//while end
//Q6
var rank=[1, 1, 1, 1, 1]; //등수 결과값 저장
for(i=0; i<size; i++){
    for(j=0; j<size; j++){
        if(num[i] < num[j]){
            rank[i]++;
        }//if end
    }//for end
    document.write("num[" + index + "] 요소의 등수: " + rank[index] +"등<br>");
}//for end
Q7) 요일 구하는 프로그램
- 서기 1년 1월 1일 ~ 서기 2022년 3월 4일 => 총 날 수 (대략 738,030일)
| 총 날 수 % 7 | 나머지 0일 | 일요일 | 
| 나머지 1일 | 월요일 | |
| 나머지 2일 | 화요일 | |
| 나머지 3일 | 수요일 | |
| 나머지 4일 | 목요일 | |
| 나머지 5일 | 금요일 | |
| 나머지 6일 | 토요일 | 
//Q7
var cYear=2022, cMonth=3, cDate=4; 
//1단계: 전년(2021년)까지 총날수 구하기 (평년 +365일 / 윤년 +366일)
var days=0; //총날수
for(y=1; y<cYear; y++){
    if((y%4==0 && y%100!=0) || (y%4==0 && y%100==0 && y%400==0)){
        days+=366;                     
    }else{
        days+=365;                     
    }//if end
}//for end
	//1단계 강사님 코드
    var hap=0; //총날수
    for(year=1; year<cYear; year=year+1){
        if(year%4==0 && year%100!=0 || year%400==0){ //윤년 구하는 공식
            hap = hap +366;
        }else{
            hap = hap +365;
        }//if end
    }//for end
//2단계: 전원(2월)까지 총날수 구하기
//1월, 3월, 5월, 7월, 8월, 10월, 12월 +=31
//4월, 6월, 9월, 11월 +=30
//2월 평년이면 +=28 윤년이면 +=29
var m31 = [1, 3, 5, 7, 8, 10, 12];
var m30 = [4, 6, 9, 11];
for(m=1; m<cMonth; m++){
    if(m31.includes(m)){
        days= days +31;
    }else if(m30.includes(m)){
        days= days +30;
    }else{
        if(cYear%4==0 && cYear%100!=0 || cYear%400==0){
        days= days +29;
        }else{
        days= days +28;
        }
    }//if end
}//for end
    
//3단계: 오늘까지 총날수 구하기
days = days + cDate;
	//2,3단계 강사님 코드
    var mon=[0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
                        //0을 넣으면 index를 count하기 편하다
    if(cYear%4==0 && cYear%100!=0 || cYear%400==0){
        mon[2]=29;      //윤년이면 2월 월수를 29일로 바꿔줌
    }//if end                                 
    for(m=1; m<cMonth; m++){
        hap=hap+mon[m];
    }//for end
    hap=hap+cDate;
//4단계: 요일출력
switch(dyas%7){
    case 0: document.write("일요일"); break;
    case 1: document.write("월요일"); break;
    case 2: document.write("화요일"); break;
    case 3: document.write("수요일"); break;
    case 4: document.write("목요일"); break;
    case 5: document.write("금요일"); break;
    case 6: document.write("토요일"); break;
}//switch end
Q8) 년도 cYear의 띠를 출력하시오
- 년도를 12로 나눴을 때 나머지가 0이면 원숭이띠, 1이면 닭띠...
//Q8
switch(cYear % 12){
    case 4: document.write("똘기"); break;
    case 5: document.write("떵이"); break;
    case 6: document.write("호치"); break;
    case 7: document.write("새초미"); break;
    case 8: document.write("드라고"); break;
    case 9: document.write("요롱이"); break;
    case 10: document.write("마초"); break;
    case 11: document.write("미미"); break;
    case 0: document.write("몽치"); break;
    case 1: document.write("키키"); break;
    case 2: document.write("강다리"); break;
    case 3: document.write("찡찡이"); break;
}//switch end
    //강사님코드
    var animal=["원숭이", "닭", "개", "돼지", "쥐", "소", "호랑이", "토끼", "용", "뱀", "말", "양"];
    document.write("띠: " + animal[cYear%12]);

Q9) 로또번호 프로그램
- 로또번호 1~45사이의 수를 서로 겹치지 않게 6개 발생시키기
- 오름차순으로 정렬해서 id=print에 출력하시오
<div id="print"></div>
<script>
    var lotto = [];
    lotto[0] = parseInt((Math.random()*45)+1);
    var i=1;
	while(i<6){
        lotto[i] = parseInt((Math.random()*45)+1);
        j=i-1;
        while(j>=0){
            if(lotto[i]!=lotto[j]){
                j--;
            }else{
                lotto[i] = parseInt((Math.random()*45)+1);
            }//if end
        }//while end
        i++;
    }//while end
    lotto.sort(function(a, b){return a - b});
    document.getElementById("print").innerHTML=lotto;
    //강사님코드
    var lotto = [];
    for(i=0; i<6; i++){
        lotto2[i]=parseInt((Math.random()*45)+1);
        for(j=0; j<i; j++){
            if(lotto2[i]==lotto2[j]){
                i--;
                break;
            }//if end
        }//for end
    }//for end
    lotto2.sort(function(a, b){return a - b});
    document.getElementById("print").innerHTML=lotto2;
    
</script>'Frontend > JavaScript' 카테고리의 다른 글
| 15. JavaScript Date 객체 (디지털 시계 만들기) (0) | 2022.05.04 | 
|---|---|
| 14. JavaScript 함수 (Function: 사용자 정의 함수, 변수의 유효범위) (0) | 2022.05.03 | 
| 12. JavaScript 배열(Array) (0) | 2022.05.02 | 
| 11. JavaScript 연습문제 모음 (이중 반복문, 조건문) (0) | 2022.04.29 | 
| 10. JavaScript 연습문제 모음 (조건문, 반복문) (0) | 2022.04.29 | 
										
									
										
									
										
									
										
									
댓글