문제 풀이 목표
- 배열을 활용하여 문제 해결 능력을 키운다.
- 쉽게 풀 수 있는 방법이 많지만, 가장 기본적인 방법으로 문제를 해결한다.
[문제 1] 실행 결과에서 제시하는 것과 같이 배열에 저장되어 있는 값 들을 반전 (true → false, false → true) 변환하는 처리를 하시오.
[출력예시] |
before → true,false,false,true,false after → false,true,true,false,true |
더보기
[풀이]
let checkList = [true, false, false, true, false];
console.log(`before → ${checkList}`);
for(let i = 0; i < checkList.length; i++) {
checkList[i] = !checkList[i];
}
console.log(`after → ${checkList}`);
↑ 풀이방법 보기
[문제 2] 다음 표는 어떤 학생의 과목별 점수이다.
HTML | CSS | Javascript | |
점수 | 75 | 82 | 91 |
이 학생의 총점과 평균점수를 구하시오. (평균점수는 소수점 둘째자리까지 표시한다)
[출력예시] |
총점: 248점, 평균점수: 82.67점 |
더보기
[풀이]
const grade = [75, 82, 91];
let sum = 0, avg = 0;
for(let i = 0; i < grade.length; i++) {
sum += grade[i];
}
avg = (sum / grade.length).toFixed(2);
console.log(`총점: ${sum}점, 평균점수: ${avg}점`);
↑ 풀이방법 보기
[문제 3] 다음 표는 어떤 학생이 일요일 부터 토요일까지의 일주일간 아르바이트를 한 시간이다.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
7 | 5 | 5 | 5 | 5 | 10 | 7 |
주말에는 7시간, 평일에는 5시간을 일하지만, 금요일에는 10시간을 일했다. 이 학생의 시급이 4,500원 이였지만, 목요일 부터는 5,200원으로 올랐다고 할 때 일주일간의 총 급여를 구하시오.
[출력예시] |
1주일간의 전체 급여: 213400원 |
더보기
[풀이1]
const time = [7,5,5,5,5,10,7];
let money = 0;
for(let i = 0; i < time.length; i++) {
if(i < time.length - 3) { // if(i < 4)
money += time[i] * 4500
} else {
money += time[i] * 5200
}
}
console.log(`1주일간의 전체 급여: ${money}원`);
[풀이2]
const time = [7,5,5,5,5,10,7];
let money = 0;
for(let i = 0; i < time.length; i++) {
let x = 0;
if(i < 4) {
x = 4500
} else {
x = 5200
}
money += time[i] * x
}
console.log(`1주일간의 전체 급여: ${money}원`);
[풀이3]
const time = [7,5,5,5,5,10,7];
let money = 0;
for(let i = 0; i < time.length; i++) {
money += time[i] * ((i < 4) ? 4500 : 5200);
}
console.log(`1주일간의 전체 급여: ${money}원`);
↑ 풀이방법 보기
[문제 4] 상품의 가격을 원소로 갖는 1차 배열 price와 상품의 수량을 원소로 갖는 1차 배열 qty를 다음과 같이 정의하였을 때 이 사람이 얼마를 결제해야 하는지 총 결제금액을 구하시오.
const price = [38000, 20000, 17900, 17900];
const qty = [6, 4, 3, 5];
[출력예시] |
전체 결제 금액: 451200원 |
더보기
[풀이]
const price = [38000, 20000, 17900, 17900];
const qty = [6,4,3,5];
let money = 0;
for(let i = 0; i < price.length; i++) {
money += price[i] * qty[i]
}
console.log("전체 결제 급액 : " + money + "원");
↑ 풀이방법 보기
[문제 5] 문제 4번의 배열에서 상품금액(price * qty)이 가장 비싼 항목은 얼마인지 구하시오.
[출력예시] |
가장 높은 상품금액: 228000원 |
더보기
[풀이]
const price = [38000, 20000, 17900, 17900];
const 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번의 상품금액(price * qty)이 8만원 이상인 경우 무료 배송이 된다고 할 때 무료 배송되는 항목은 몇 개 인지 구하시오.
[출력예시] |
무료배송 항목: 3건 |
더보기
[풀이]
const price = [38000, 20000, 17900, 17900];
const 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] 아래의 코드는 상품의 가격을 배열로 나타낸 것이다. 낮은 가격순 으로 재정렬 하시오.
const price = [209000, 109000, 119000, 109000, 94000];
[출력예시] |
상품가격 → 209000,109000,119000,109000,94000
낮은가격순 → 94000,109000,109000,119000,209000
|
더보기
[풀이]
const 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]) {
let tmp = price[i];
price[i] = price[j];
price[j] = tmp;
}
}
}
console.log(`낮은가격순 → ${price}`);
↑ 풀이방법 보기
[문제 8] 아래 배열을 반대로 배치하는 코드를 작성하시오. (reverse 함수 사용x)
const arr = [5, 3, 2, 8, 9];
[출력예시] |
before → 5,3,2,8,9
after → 9,8,2,3,5 |
더보기
[풀이]
const arr = [5, 3, 2, 8, 9];5
console.log("before → " + arr);
for(let i = 0; i < parseInt(arr.length / 2); i++) {
let tmp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = tmp;
}
console.log("after → " + arr);
↑ 풀이방법 보기
[문제 9] 다음 표는 어느 학급의 성적표이다.
HTML | CSS | Javascript | |
둘리 | 78 | 89 | 96 |
도우너 | 62 | 77 | 67 |
또치 | 54 | 90 | 80 |
희동 | 100 | 99 | 98 |
학생별 총점과 평균점수를 구하기 위한 코드를 작성하시오. (평균점수의 경우 소수 둘째자리 까지만 출력)
[출력예시] |
둘리 총점: 263점, 평균: 87.67점
도우너 총점: 206점, 평균: 68.67점
또치 총점: 224점, 평균: 74.67점
희동 총점: 297점, 평균: 99.00점
|
더보기
[풀이]
const student = ["둘리", "도우너", "또치", "희동"];
const grade = [
[78, 89, 96,],
[62, 77, 67],
[54, 90, 80],
[100, 99, 98],
];
let avg = 0;
for(let i = 0; i < grade.length; i++) {
let sum = 0;
for(let j = 0; j < grade[i].length; j++) {
sum += grade[i][j];
}
avg = (sum / grade[i].length).toFixed(2);
console.log(`${student[i]} 총점: ${sum}점, 평균: ${avg}점`)
};
↑ 풀이방법 보기
[문제 10] 문제 9번의 표를 보고 반평균을 출력하시오.(toFixed() 함수는 숫자를 문자열로 나타낸다)
[출력예시] |
둘리 총점: 263점, 평균: 87.67점
도우너 총점: 206점, 평균: 68.67점
또치 총점: 224점, 평균: 74.67점
희동 총점: 297점, 평균: 99.00점
반평균 = 82.5점 |
더보기
[풀이]
const student = ["둘리", "도우너", "또치", "희동"];
const grade = [
[78, 89, 96,],
[62, 77, 67],
[54, 90, 80],
[100, 99, 98],
];
let avg = 0, classAvg = 0;
for(let i = 0; i < grade.length; i++) {
let sum = 0;
for(let j = 0; j < grade[i].length; j++) {
sum += grade[i][j];
}
avg = sum / grade[i].length;
personalAvg = avg.toFixed(2);
classAvg += avg / student.length;
console.log(`${student[i]} 총점: ${sum}점, 평균: ${personalAvg}점`);
};
console.log(`반평균 = ${classAvg}점`);
↑ 풀이방법 보기
[문제 11] 아래 표는 어떤 물건들의 단가와 수량이다.
단가 | 500원 | 320원 | 100원 | 120원 | 92원 | 30원 |
수량 | 291개 | 586개 | 460개 | 558개 | 18개 | 72개 |
단가-수량을 한세트로 하는 정보들을 2차 배열로 구성하고, 이 물건들을 판매하면 받는 금액은 얼마인지 구하시오. (판매금액은 원래 가격의 90%만 받을 수 있다)
[출력예시] |
물건 총 판매가격: 404816.4원 |
더보기
[내가 풀이한 코드]
const item = [
[500, 291],
[320, 586],
[100, 460],
[120, 558],
[92, 18],
[30, 72]
];
let totalMoney = 0;
for(let i = 0; i < item.length; i++) {
let money = 1;
for(let j = 0; j < item[i].length; j++) {
money *= item[i][j];
}
totalMoney += money;
}
const changeMoney = totalMoney * 0.9;
console.log(`물건 총 판매가격: ${changeMoney}원`);
[강사님이 풀이한 코드]
// 2차원 배열이라고 해서 무조건 중첩 for문을 쓰는건 아니다
const inven = [
[500,291],
[320,586],
[100,460],
[120,558],
[92,18],
[30,72]
];
let totalPrice = 0;
for(let i = 0; i < inven.length; i++) {
const itemPrice = (inven[i][0] * 0.9) * inven[i][1];
totalPrice += itemPrice;
}
console.log(`물건 총 판매가격: ${totalPrice}원`);
↑ 풀이방법 보기
[문제 12] 주민번호 한 글자씩 모든 숫자를 원소로 갖는 배열을 정의하고, 유효한 주민등록번호인지 판별하는 코드를 구현하시오.
- 기본 주민등록코드에는 각 숫자에 대응하는 가중치가 있다. 가중치는 주민등록번호의 순서에 따라 "2 3 4 5 6 7 8 9 2 3 4 5" 이다.
- 마지막 숫자는 제외하고, 기본코드의 각 12자리와 가중치를 모두 곱하여 합한다.
- 합한 값을 11로 나눈 나머지 값을 구한다.
- 11에서 그 나머지 값을 뺀 후, 이를 10을 나눈 나머지를 구한다.
- 나머지의 1의 자리 값과 주민등록번호 마지막 자리 값이 맞아야 유효한 주민등록번호이다.
더보기
[내가 풀이한 코드]
const jumin = [0,1,1,2,1,3,1,0,0,0,1,2,3];
// 가짜 주민등록번호로 유효하지 않는 주민번호이다.
const checkJumin = [2,3,4,5,6,7,8,9,2,3,4,5];
let multiply = 0, result = 0;
for(let i = 0; i < jumin.length - 1; i++) {
multiply += jumin[i] * checkJumin[i]
}
result = (11 - (multiply % 11)) % 10;
if(result == jumin[jumin.length - 1]) {
console.log("유효한 주민번호");
} else {
console.log("유효하지 않는 주민번호");
}
[강사님 풀이한 코드]
ssn = [0,1,1,2,1,3,1,0,0,0,1,2,3];
// 가짜 주민등록번호로 유효하지 않는 주민번호이다.
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("유효하지 않는 주민번호");
}
↑ 풀이방법 보기
'국비수업 > JavaScript' 카테고리의 다른 글
[Javascript] [연습문제] JSON 객체 실습 (0) | 2022.02.07 |
---|---|
[Javascript] JSON (0) | 2022.02.04 |
[Javascript] 배열 (0) | 2022.01.29 |
[Javascript] [연습문제] 기본 문법 활용 실습 (0) | 2022.01.28 |
[Javascript] 변수의 스코프, 조건문 과 반복문 (0) | 2022.01.27 |