문제 풀이 목표

  1. 배열을 활용하여 문제 해결 능력을 키운다.
  2. 쉽게 풀 수 있는 방법이 많지만, 가장 기본적인 방법으로 문제를 해결한다. 

 

[문제 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("유효하지 않는 주민번호");
}

↑ 풀이방법 보기

+ Recent posts