본문 바로가기
Frontend/JavaScript

13. JavaScript 연습문제 모음 (Array)

by 개발개발빈이 2022. 5. 2.

● 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]);

2022년은 호치(호랑이)의 해

    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>

댓글