배열

mamomi·2022년 10월 26일
0

practice-js

목록 보기
1/10
post-thumbnail

배열 처음 공부할 때는 헷갈려서 죽을 거 같더니 연습문제까지 풀고 나니까 감이 조금 잡히는 듯...

1. 다음의 소스코드는 boolean 데이터를 저장하고 있는 배열에 대한 어떤 처리를 보여준다.실행 결과에서 제시하는 것과 같이 배열에 저장되어 있는 값들을 반전(true는 false로, false는 true로)변환하는 처리를 완성하시오.

var check_list = [true,false,false,true,false];
console.log("before --> " + check_list);
for (let i=0; i<check_list.length; i++) {
    check_list[i] = !check_list[i];
}
console.log("after --> " + check_list);

2. 다음 표는 어떤 학생의 과목별 점수이다. 이 학생의 총점과 평균점수를 구하는 프로그램에 대한 아래의 소스코드를 완성하시오.

var grade = [75,82,91];
var sum =0, avg = 0;

// 총점 구하기
for (let i=0; i<grade.length; i++) {
    sum += grade[i];
}
// 평균 구하기
avg = sum / grade.length;
// arr의 값을 소수점 둘째 자리까지로 제한한다.
avg =avg.toFixed(2);
console.log("총점: "+sum+"점, 평균점수: "+avg+"점");

3. 주말에는 7시간, 평일에는 5시간을 일하기로 했지만, 금요일에 다른 직원의 사정으로 대신 근무를 하게되어 10시간을 일했다. 이 학생의 시급이 4,500이었지만 목요일부터는 5,200원으로 올랐다고 할 때 일주일간의 총 급여를 구하는 프로그램을 작성하시오.

// 풀이1
var time = [7,5,5,5,5,10,7];
var money = 0;
for (let i=0; i<time.length; i++) {
    if (i < 4) {
        money += time[i] * 4500;
    } else {
        money += time[i] * 5200;
    }
}
console.log("1주일간의 전체 급여: "+money+"원");

// 풀이2
let x=0;
if (i<4) {
    x * 4500;
} else {
    x * 5200;
}
money =+ time[i] * x;

// 풀이3
let x = (i<4) ? 4500 : 5200;
money += time[i] *x;

// 풀이4
money += time[i] * ((i<4) ? 4500 : 5200;);

4. 상품의 가격을 원소로 갖는 1차 배열 price와 각 상품의 수량을 원소로 갖는 1차 배열 qty를 다음과 같이 정의하였을 때 이 사람이 총 얼마를 결제해야 하는지 총 결제금액을 구하는 프로그램을 작성하시오.

var price = [38000,20000,17900,17900];
var qty = [6,4,3,5];
var money = 0;
for (let i=0; i<price.length; i++) {
    money += price[i] * qty[i];
}
console.log("전체 결제 금액: "+money+"원");

5. 문제 4번의 장바구니 내역에서 상품금액(판매가 * 수량)이 가장 비싼 항목은 얼마인지 출력하시오.

var price = [38000,20000,17900,17900];
var qty = [6,4,3,5];
let money = price[0] * qty[0];
for (let i=1; i<price.length; i++) {
    const sum = price[i] * qty[i];
    if (money < sum) {
        money = sum;
    }
}
console.log("가장 높은 상품금액: "+money+"원");

6. 문제4번의 장바구니 내역에서는 모든 장바구니 상품이 개별 배송이라고 한다. 상품금액(판매가 * 수량)이 8만원 이상인 경우 무료로 배송이 된다고 할 때 무료로 배송되는 항목은 모두 몇 개 인지 구하는 프로그램을 구현하시오.

var price = [38000,20000,17900,17900];
var qty = [6,4,3,5];
let count = 0;
for (let i=0; i<price.length; i++) {
    const sum = price[i] * qty[i];
    if (sum >=80000) {
        count++;
    }
}
console.log("무료배송 항목: "+count+"건");

7. 아래의 소스코드는 위의 상품 목록에서 상품의 가격을 원소로 하는 배열 money를 정의하였을 때 “낮은가격순”버튼이 눌러졌을 때 상품의 가격을 재정렬하기 위한 코드에 대한 일부이다. 빈 칸을 채워넣어 완성하시오.

var price = [209000,109000,119000,109000,94000];
console.log("상품가격 -- > "+price);
for (var i=0; i<price.length-1; i++) {
    for (var j=i+1; j<price.length; j++) {
        if (price[i] > price[j]) {
            const tmp = price[i];
            price[i] = price[j];
            price[j] = tmp;
        }
    }
}
console.log("낮은가격순 --> "+price);

8. 아래의 코드는 배열의 원소를 반대로 배치하는 소스코드의 일부이다. 빈 칸을 완성하시오. (번호가 같은 박스는 같은 코드가 들어갑니다.)

let arr = [5,3,2,8,9];
const p = arr.length % 2 == 0 ? arr.length / 2 : (arr.length-1)/2;
console.log("before --> "+arr);
for (let i = 0; i < p; i++) {
    const k = arr.length - i - 1;
    var tmp = arr[i];
    arr[i] = arr[k];
    arr[k] = tmp;
}
console.log("after --> "+arr);

9. 학생별 총점과 평균점수를 구하기 위한 소스코드를 아래와 같이 작성중이다. 빈 칸을 완성하시오. 단, 평균점수의 경우 toFixed() 함수를 사용하여 소수점 둘째 자리까지만 출력하시오.

const student = ["둘리","도우너","또치","희동"];
const grade = [
    [78,89,96],[62,77,67],[54,90,80],[100,99,98]
];
let sum=0, avg=0;
for (let i=0; i<grade.length; i++) {
    sum = 0;
    for (let j=0; j<grade[i].length; j++) {
        sum += grade[i][j];
    }
    avg = sum / grade[i].length;
    avg = avg.toFixed(2);
}
console.log(student[i] + " 총점: " + sum + "점, 평균: " + avg + "점");

10. 위의 문제에서 반 평균을 출력하시오. 반 평균은 학생의 평균점수 총 합/학생수로 구합니다. (toFixed() 함수로 가공된 값은 문자열 형태이기 때문에 숫자 연산이 불가능합니다. 이를 감안하여 반 점수를 구하세요.)

const student = ["둘리","도우너","또치","희동"];
const grade = [
    [78,89,96],[62,77,67],[54,90,80],[100,99,98]
];
let sum=0, avg=0;
var class_sum=0;
var class_avg=0;
for (let i=0; i<grade.length; i++) {
    sum = 0;
    for (let j=0; j<grade[i].length; j++) {
        sum += grade[i][j];
    }
    avg = sum / grade[i].length;
    class_sum += avg;
    avg = avg.toFixed(2);
    console.log(student[i] + " 총점: " + sum + "점, 평균: " + avg + "점");
}
class_avg = class_sum / student.length;
class_avg.toFixed(2);
console.log("반평균=" + class_avg + "점");

11. 첫 줄에 있는 아이템을 판매한다고 할 때 이 유저가 벌어들이는 골드(G)의 총액은 얼마인가? (판매를 위해 선택한 아이템의 상단에는 1개당 가격이 표시되고, 아이템을 판매할 때는 원래 가격의 90%만 받을 수 있다고 한다.)

  • 가격과 아이템 수량의 정보를 2차 배열로 구성하는 소스코드를 완성하세요.
    ("단가-수량"을 한 세트로 하는 정보들을 배열로 구성하면 2차 배열 형태가 됩니다.)
const inven2 = [
    [500,320,100,120,92,30],[291,586,460,558,18,72]
];

let total_price2 = 0;
for (let i=0; i<inven2[0].length; i++) {
    total_price2 += (inven2[0][i]*0.9) * inven2[1][i];
}
console.log("아이템 총 판매가격: "+total_price2+"G");

12. 기본 주민등록코드에는 각 숫자에 대응하는 가중치가 있다. 가중치는 주민등록번호의 순서에 따라 2 3 4 5 6 7 8 9 2 3 4 5 이다.

1) 마지막 숫자는 제외하고, 기본코드의 각 12자리와 가중치를 모두 곱하여 합한다.
2) 합한 값을 11로 나눈 나머지 값을 구한다.
3) 11에서 그 나머지 값을 뺀 후, 이를 10을 나눈 나머지를 구한다.
4) 나머지의 1의 자리 값과 주민등록번호 마지막 자리 값이 맞아야 유효한 주민등록번호이다.

ssn = [9,5,0,8,3,0,2,2,3,6,4,1,6];
let k=2;
let sum =0;
for (let i=0; i<ssn.length-1; i++) {
    sum += ssn[i]*k;
    k++;
    if (k>9) {
        k=2;
    }
}
let mod = sum % 11;
let x = (11-mod) % 10;
let y = x % 10;
if (y == ssn[ssn.length-1]) {
    console.log("유효한 주민번호");
} else {
    console.log("유효하지 않은 주민번호");
}

profile
되고 싶다. 나는. 멋진 개발자가.

0개의 댓글

관련 채용 정보