라라리라
2023.08.03 / Step 7 [이차반복문] - 코딩 15 일차 본문
이차반복문5_개념01_추가.html
<script>
/*
[문제]
arr배열은 이미 1~3의 값이 저장되어 있다.
이제 추가로 랜덤(1~10)을 10회 반복하여 추가하려 한다.
단, 중복숫자가 있으면 저장하지 않는다.
[예시1]
1, 2, 3, 10, 8, 9, 4
[예시2]
1, 2, 3, 9, 5, 4, 8, 10, 6
[예시3]
1, 2, 3, 6, 4, 8
*/
let arr = [1, 2, 3];
for(let i = 0 ; i < 10; i++){
let r = Math.floor(Math.random() * 9) + 1;
let check = false;
for(let j = 0 ; j < arr.length; j++){
if(r == arr[j]){
check = true;
}
}
if(check == false){
arr.push(r);
}
}
document.write(arr);
</script>
이차반복문5_개념02_삭제.html
<script>
/*
[문제]
arr배열에는 1~5의 값이 추가되어 있다.
랜덤(1~10) 숫자를 10번 발생시켜
랜덤 값이 arr배열 안에 있으면 arr배열에서 삭제하고,
없으면 "삭제불가" 를 출력한다.
[예시]
r = 9 : 삭제불가
r = 9 : 삭제불가
r = 8 : 삭제불가
r = 3 : [1, 2, 4, 5]
r = 6 : 삭제불가
r = 6 : 삭제불가
r = 8 : 삭제불가
r = 5 : [1, 2, 4]
r = 1 : [2, 4]
r = 6 : 삭제불가
*/
let arr = [1, 2, 3, 4, 5];
for(let i = 0 ; i < 10; i ++){
let r = Math.floor(Math.random() * 10);
document.write("r = " + r + " " )
let check = false;
for(let j = 0; j < arr.length; j++){
if(r == arr[j]){
check = true;
arr.splice(j , 1);
}
}
if(check == true){
i --;
document.write(" : " + arr + "<br>");
} else {
document.write(" : 삭제불가<br>")
}
}
</script>
이차반복문5_개념03_중복제거.html
<script>
/*
[문제]
a배열과 b배열을 비교하여
서로 겹치는 값을 0으로 변경하시오.
겹치는 값이 여러 개면 전부 0으로 변경하시오.
[정답]
a = [0, 0, 30, 40, 0]
b = [0, 3, 0, 0, 0, 50]
*/
let a = [10, 20, 30, 40, 20];
let b = [10, 3, 20, 10, 20, 50];
for(let i = 0 ; i < a.length; i ++){
let index = -1;
for(let j = 0 ; j < b.length; j++){
if(a[i] == b[j]){
index = a[i];
b[j] = 0;
}
} if(index != -1){
for(let j = 0; j < a.length; j++){
if(a[j] == index){
a[j] = 0;
}
}
}
}
document.write("a = " + a + " <br>b = " + b + "<br>");
</script>
이차반복문5_개념04_인풋삽입.html
<script>
/*
[문제]
arr배열에 value배열의 값 3개를 추가하려고 한다.
단, arr배열의 마지막에 추가하는것이 아니고,
index배열의 위치에 추가하고, 위치 뒤의 모든 값은
한칸씩 뒤로 이동한다.
[예시]
index : 2, value = 60, arr = [10,20,60,30,40,50]
index : 1, value = 70, arr = [10,70,20,60,30,40,50]
index : 0, value = 80, arr = [80,10,70,20,60,30,40,50]
[정답]
arr = [80, 10, 70, 20, 60, 30, 40, 50]
*/
let arr = [10, 20, 30, 40, 50];
let index = [2, 1, 0];
let value = [60, 70, 80];
for(let i = 0 ; i < 3; i++){
arr.push(0);
for(let j = arr.length - 1; j > index[i]; j--){
arr[j] = arr[j - 1];
} arr[index[i]] = value[i];
document.write("index : " + index[i] + ", value : " + value[i] + ", arr = [" + arr + "] <br>");
}
document.write("arr = [" + arr + "] ");
</script>
이차반복문5_개념05_약수개수맥스.html
<script>
/*
[문제]
arr배열의 각 값의 약수들을 전부 출력하고
각 약수의 개수를 count배열에 추가한다.
개수가 가장 많은 약수를 max배열에 추가한다.
개수가 가장 많은 약수가 여러 개일 땐 전부 추가한다.
[예시]
1 43
1 5 11 55
1 5 13 65
1 11
count = [2, 4, 4, 2]
max = [55, 65]
[정답]
max = [55, 65]
*/
let arr = [43, 55, 65, 11];
let count = [];
let max = [];
for(let i = 0; i < arr.length; i++){
let sum = 0;
for(let j = 1 ; j <= arr[i]; j++){
if(arr[i] % j == 0){
document.write(j + " ");
sum++;
}
}
count.push(sum);
document.write("<br>");
}
document.write(" count = " + count + "<br>");
let Max = 0;
let Maxid = 0;
for(let j = 0; j< count.length; j++){
if(Max <= count[j]){
Max = count[j];
Maxid = j;
}
}
for(let i = 0; i < count.length; i++){
if(Max == count[i]){
max.push(arr[i]);
}
}
document.write("max = " + max +"<br>");
</script>
이차반복문5_개념06_순환.html
<script>
/*
[문제]
랜덤(1~5)숫자 하나를 저장하고 그 숫자만큼 arr배열을 순환시키시오.
순환이란, 모든 값을 뒤로 밀고 맨 뒤의 값은 맨 앞으로 오는 것을 의미한다.
[예시]
arr = [10,20,30,40,50]
r = 3
랜덤이 3이 나왔으므로, 아래와 같이 세번 순환을 한다.
arr = [50,10,20,30,40]
arr = [40,50,10,20,30]
arr = [30,40,50,10,20]
*/
let arr = [10, 20, 30, 40, 50];
let r = Math.floor(Math.random() * 5) + 1;
document.write("r = " + r + "<br><br>");
for(let i = 0; i < r; i ++){
let temp = arr[arr.length - 1]
for(let j = arr.length - 1 ; j > 0; j--){
arr[j] = arr[j-1];
} arr[0] = temp;
document.write("arr = " + arr + "<br>")
}
</script>
이차반복문5_문제01_같은수합치기.html
<script>
/*
[문제]
[1] a배열의 값들을 순차적으로 검사한다.
[2] 연속으로 같은 값이 두 개가 있다면,
[3] 두 수를 삭제하고 그 합을 다시 그 자리에 저장한다.
[4] 연속으로 같은 값이 없을 때까지 (1~3)을 반복한다.
b = [8,4,2,2,8,4,4] , 세번째 자리 2, 2가 연속이다.
b = [8,4,4,8,4,4] , 두번째 자리 4, 4가 연속이다.
b = [8,8,8,4,4] , 첫번째자리 8, 8 이 연속이다.
b = [16,8,4,4] , 세번째자리 4, 4 이 연속이다.
b = [16,8,8] , 두번째자리 8, 8 이 연속이다.
b = [16,16] , 첫번째자리 16, 16 이 연속이다.
b = [32] , 연속된 수가 없다.
[정답]
b = [32, 0, 0, 0, 0, 0, 0]
*/
let a = [8, 4, 2, 2, 8, 4, 4];
let b = [0, 0, 0, 0, 0, 0, 0];
let index = 0;
b[index] = a[index];
let i = 1;
while(true){
if(b[index] == a[i]){
b[index] = b[index] * 2;
while(true){
let check = false;
for(let j = 0; j < index; j++){
if(b[j] == b[j + 1]){
b[j] = b[j] * 2;
b[j + 1] = 0;
check =true;
index--;
}
}
if(check == false){
break;
}
}
} else {
b[index + 1] = a[i];
index++;
}
i++;
if(i == a.length){
break;
}
}
document.write(b + " ");
</script>
이차반복문5_문제02_개수세기.html
<script>
/*
[문제]
arr배열의 값을 중복없이 value배열에 저장한다.
그리고 중복되는 개수를 count배열에 저장한다.
[정답]
value = [10, 20, 30, 100]
count = [ 2, 3, 5, 1]
*/
let arr = [10, 20, 30, 30, 100, 10, 30, 30, 20, 30, 20];
let value = [];
let count = [];
for(let i = 0; i < arr.length; i++){
let check = false;
for(let j = 0 ; j < value.length; j++){
if(arr[i] == value[j]){
check = true;
}
}
if(check == false){
value.push(arr[i]);
}
}
for(let i = 0; i < value.length; i++){
let sum = 0;
for(let j = 0; j < arr.length; j++){
if(value[i] == arr[j]){
sum++;
}
}
count.push(sum);
}
document.write("value = " + value + "<br>count = " + count);
</script>
이차반복문5_문제03_거스름돈.html
<script>
/*
[문제]
아래 배열은 철수가 소지한 현금 개수이다.
money는 돈 단위를 뜻하고,
count는 단위별 개수를 뜻한다.
거스름돈은 7800일 때,
단위별로 나눠주고,
count배열 값을 조정 후 출력하시오.
[정답]
count = [1, 1, 0, 0, 2, 7]
*/
let money = [50000, 10000, 5000, 1000, 500, 100];
let count = [ 1, 1, 1, 1, 5, 10];
let charge = 7800;
for(let i = 0; i < money.length; i++){
while(true){
if(money[i] <= charge && count[i] > 0){
charge -= money[i];
count[i]--;
} else {
break;
}
}
}
document.write("count = " + count + "<br>")
</script>
이차반복문5_문제04_겹치는배열.html
<script>
/*
[문제]
a배열을 순차적으로 검사한다.
b배열의 값들이 a배열의 값들과 완벽히 겹치는지 검사하시오.
겹치면 "o", 안겹치면 "x"를 출력하시오.
[예시1]
b = [6,1,8]
[1,3,3,6,5,(6,1,8),9] 완벽히 겹친다.
[예시2]
b =[6,3]
[1,3,3,6,5,6,1,8,9] 겹치는 부분이 없다.
[예시3]
b =[3,6,5,6]
[1,3,(3,6,5,6),1,8,9] 완벽히 겹친다.
*/
let a = [1, 3, 3, 6, 5, 6, 1, 8, 9];
let b = [6, 1, 8];
let check = false;
for(let i = 0 ; i < a.length - b.length + 1; i++){
let count = 0;
for(let j = 0; j < b.length ; j++){
if(a[i + j] == b[j]){
count++;
}
}
if(count == b.length){
check = true;
}
}
if(check){
document.write("완벽히 겹친다");
} else {
document.write("겹치는 부분이 없다.")
}
</script>
이차반복문5_문제05_나홀로숫자제거.html
<script>
/*
[문제]
a배열에서 혼자 있는 값만 제외하고
b배열에 추가하시오.
[정답]
[1,2,3,2,1] : b = [1,2,2,1] // 3 삭제
[1,3,4,4,2] : b = [4,4] // 1,2,3 삭제
[1,1,1,1,1] : b = [1,1,1,1,1] // 없음
*/
let a = [1, 2, 3, 2, 1];
// a = [1, 3, 4, 4, 2];
// a = [1, 1, 1, 1, 1];
let b =[];
for(let i = 0; i < a.length; i++){
let count = 0;
for(let j = 0; j < a.length; j++){
if(a[i] == a[j]){
count++;
}
}
if(count > 1){
b.push(a[i]);
}
}
document.write(b);
</script>
이차반복문5_문제06_배열두개정렬.html
<script>
/*
[문제]
아래 리스트 두 개를 합치고 오름차순으로 정렬하시오.
[정답]
[1, 2, 3, 5, 7, 8, 9, 10, 12, 15, 19, 20]
*/
let a = [9, 10, 3, 2, 20, 19];
let b = [15, 12, 1, 5, 7, 8];
let c = [];
for(let i = 0; i < a.length; i++){
c.push(a[i]);
}
for(let i = 0; i < b.length; i++){
c.push(b[i]);
}
document.write("c = " + c + "<br>");
for(let i = 0; i < c.length; i++){
let min = c[i];
let minid = i;
for(let j = i; j < c.length; j++){
if(min >= c[j]){
min = c[j];
minid = j;
}
}
let temp = c[i];
c[i] = c[minid];
c[minid] = temp;
}
document.write("c = " + c + "<br>");
</script>
이차반복문5_문제07_삼각형여러개.html
<script>
/*
[문제]
아래와 같이 출력하시오.
*/
/*
[문제1]
11112
11122
11222
12222
*/
for(let i = 0; i < 4; i++){
for(let j = 0; j < 5 - (i + 1) ; j ++){
document.write(1 + " ")
}
for(let j = 0; j < i + 1; j++){
document.write(2 + " ");
}
document.write("<br>");
}
document.write("<br>==============================================<br>");
/*
[문제2]
12222
11222
11122
11112
*/
for(let i = 0; i < 4; i ++){
for(let j = 0; j < i + 1; j++){
document.write(1 + " ");
}
for(let j = 0; j < 5 - (i + 1); j++ ){
document.write(2 + " ");
}
document.write("<br>");
}
document.write("<br>=========================================<br>");
/*
[문제3]
11211
12221
22222
*/
let k = 1;
for(let i = 0; i < 3; i ++){
for(let j = 0; j < 2 - i; j++){
document.write(1 + " ");
}
for(let j = 0; j < k ; j ++){
document.write(2 + " ");
}
for(let j = 0; j < 2 - i; j++){
document.write(1 + " ");
}
k+= 2;
document.write("<br>");
}
document.write("<br>====================================<br>");
/*
[문제4]
2
222
22222
*/
let l = 1;
for(let i = 0; i < 3; i++){
for(let j = 0; j < 2 - i ; j++){
document.write(" " + " ");
}
for(let j = 0; j < l; j++){
document.write(2 + " ");
}
for(let j = 0; j < 2 - i; j++){
document.write(" " + " ");
}
document.write("<br>");
l += 2;
}
/*
[문제5]
22222
222
2
*/
document.write("<br>========================================<br>");
let m = 5;
for(let i = 0; i < 3; i++){
for(let j = 0; j < i ; j++){
document.write(" " + " ");
}
for(let j = 0; j < m; j++){
document.write(2 + " ");
}
for(let j = 0; j < i ; j++){
document.write(" " + " ");
}
document.write("<br>");
m -= 2;
}
</script>
이차반복문5_문제08_숫자이동.html
<script>
/*
[문제]
철수는 게임을 개발하고 있다.
game배열을 아래와 같이 사각형으로 출력한다.
숫자8 은 현재 플레이어가 있는 자리이다.
숫자0 은 플레이어가 이동할 수 있는 자리이다.
숫자1 은 플레이어가 이동할 수 없는 벽이다.
order배열은 플레이어를 움직이기 위한 명령어들이다.
숫자 1~4로 표현하고 북(1)동(2)남(3)서(4)를 뜻한다.
order의 내용대로 플레이어가 이동하는 경로를 전부 출력하시오.
벽 때문에 이동할 수 없을 때는 "이동 불가"를 출력하시오.
*/
let game = [1,1,1,1,1,
1,0,0,0,1,
1,0,8,0,1,
1,0,0,0,1,
1,1,1,1,1];
let order = [1, 2, 3, 3, 3, 1, 4, 1];
let player = 8;
let curpos = 0;
let wall = 1;
let road = 0;
for(let i = 0; i < game.length; i++){
if(game[i] == player){
curpos = i;
}
}
document.write("플레이어의 현재 위치 = " + curpos + "<br>");
for(let i = 0; i < order.length; i++){
let temp = curpos;
if(order[i] == 1){
temp -= 5;
} else if (order[i] == 2){
temp += 1;
} else if (order[i] == 3){
temp += 5;
} else if (order[i] == 4){
temp -= 1;
}
if(game[temp] == wall){
document.write("벽이라 움직일 수 없습니다.<br>");
} else {
game[curpos] = 0;
curpos = temp;
game[curpos] = player;
}
for(let j = 0; j < game.length; j++){
document.write(game[j] + " ");
if(j % 5 == 4){
document.write("<br>");
}
}
document.write("<br>========================<br>")
}
</script>
이차반복문5_문제09_압축.html
<script>
/*
[문제]
a배열의 값을 b에 저장한다.
단, 연속으로 중복되는 값은 한 개만 저장하고
나머지는 저장하지 않는다.
[예시]
b = [1,3,2,3,4,5,6]
*/
let a = [1, 1, 1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 4, 5, 6, 6, 6];
let b = [];
let index = 0;
b.push(a[index]);
for(let i = 0; i < a.length; i++){
if(b[index] != a[i]){
b.push(a[i]);
index++;
}
}
document.write("b = " + b + "<br>");
</script>
이차반복문5_문제10_역순환.html
<script>
/*
[문제]
랜덤(1~5) 숫자 하나를 저장하고 그 숫자만큼 arr배열에 역순환시키시오.
역순환이란, 모든 값들을 앞으로 밀고 맨 앞의 값은 맨 뒤로 이동하는 것을 말한다.
[예시]
arr = [10,20,30,40,50]
r = 3
랜덤이 3이 나왔으므로, 아래와 같이 세 번 역순환을 한다.
arr = [20,30,40,50,10]
arr = [30,40,50,10,20]
arr = [40,50,10,20,30]
*/
let arr = [10, 20, 30, 40, 50];
let r = Math.floor(Math.random() * 5) + 1;
document.write("r = " + r + "<br>");
for(let i = 0; i < r ; i++){
let temp = arr[0];
for(let j = 0; j < arr.length - 1; j++){
arr[j] = arr[j + 1];
}
arr[arr.length - 1] = temp;
document.write("arr = " + arr + "<br>")
}
</script>
이차반복문5_문제11_인풋추가삭제.html
<script>
/*
[문제]
arr배열에 value의 값을 추가 하거나 삭제 한다.
order의 값이 1이면 value값을 추가한다.
order의 값이 2이면 value값을 삭제한다.
단, 추가할 값이 arr배열에 이미 추가되어있으면 "중복" 출력하시오.
단, 삭제할 값이 arr배열에 없으면 "삭제 불가" 출력하시오.
order = 1 , value = 10 , arr = [10]
order = 2 , value = 20 , arr = [10] , "삭제 불가"
order = 1 , value = 30 , arr = [10, 30]
order = 2 , value = 10 , arr = [30]
order = 1 , value = 30 , arr = [30] , "중복"
order = 2 , value = 30 , arr = []
*/
let arr = [];
let order = [1, 2, 1, 2, 1, 2];
let value = [10, 20, 30, 10, 30, 30];
for(let i = 0; i < order.length; i++){
let check = false;
let check2 = -1;
for(let j = 0; j < arr.length; j++){
if(order[i] == 1){
if(value[i] == arr[j]){
check = true;
}
} else {
if(value[i] == arr[j]){
check2 = j;
}
}
}
if(order[i] == 1 && check == false){
arr.push(value[i]);
} else if(order[i] == 1 && check == true) {
document.write("중복 ");
}
if(order[i] == 2 && check2 >= 0){
arr.splice(check2, 1)
} else if(order[i] == 2 && check2 == -1){
document.write("삭제불가 ");
}
document.write("order = " + order[i] + " value = " + value[i] + " arr = " + arr + "<br>")
}
</script>
이차반복문5_문제12_자리수합계.html
<script>
/*
[문제]
아래 arr배열의 값을 자리별로 분리 후,
그 합을 total배열에 추가하시오.
[예시]
[1] 1 + 3 + 2 total = [6]
[2] 4 + 3 + 5 + 4 total = [6,16]
[3] 2 + 3 + 3 total = [6,16,8]
[4] 6 + 6 + 7 + 6 + 5 total = [6,16,8,30]
[정답]
total = [6, 16, 8, 30]
*/
let arr = [132, 4354, 233, 66765];
let total = [];
for(let i = 0; i < arr.length; i++){
let sum = 0;
let temp = arr[i]
while(true){
let unit = temp % 10;
sum+= unit;
temp = parseInt(temp / 10);
if(temp == 0){
break;
}
}
total.push(sum);
document.write(total + "<br>");
}
</script>
이차반복문5_문제13_자판기.html
<script>
/*
[문제]
철수는 자판기에 물건을 채우려고 한다.
vending 배열은 현재 자판기에 남아있는 물건 개수이다.
box배열은 자판기에 추가할 물건 개수이며, 5개씩 4줄 총 20개 여분이 있다.
box의 앞에서부터 순차적으로 자판기에 물건을 채워 넣는다.
자판기는 한 줄당 최대 10개까지 채울 수 있다.
자판기가 전부 채워지거나 box가 전부 비워지면 종료되는 프로그램을 작성하시오.
[예시]
vending = [7, 5, 3, 5, 3]
box = [5, 5, 5, 5]
vending = [10, 5, 3, 5, 3]
box = [2, 5, 5, 5]
vending = [10, 7, 3, 5, 3]
box = [0, 5, 5, 5]
vending = [10, 10, 3, 5, 3]
box = [0, 2, 5, 5]
vending = [10, 10, 5, 5, 3]
box = [0, 0, 5, 5]
vending = [10, 10, 10, 5, 3]
box = [0, 0, 0, 5]
vending = [10, 10, 10, 10, 3]
box = [0, 0, 0, 0]
[정답]
vending = [10, 10, 10, 10, 3]
box = [0, 0, 0, 0]
*/
let vending = [7, 5, 3, 5, 3];
let box = [5, 5, 5, 5];
let vid = 0;
let bid = 0;
while(true){
if(vending[vid] < 10){
let temp = 10 - vending[vid];
if(temp <= box[bid]){
vending[vid] = 10;
box[bid] -=temp;
} else {
vending[vid] += box[bid];
box[bid] = 0;
}
}
if(vending[vid] == 10){
vid++;
}
if(box[bid] == 0){
bid++;
}
if(vid == vending.length){
break;
}
if(bid == box.length){
break;
}
}
document.write("vending = " + vending + "<br>box = " + box +"<br>");
</script>
이차반복문5_문제14_전부같은값.html
<script>
/*
[문제]
a배열과 b배열의 값들이 각각 값과 개수가 똑같은지 확인한다.
똑같으면 "같음", 아니면 "다름"을 출력하시오.
위치는 상관없이 각각의 숫자의 개수가 일치하면 "같음"이다.
[정답]
같음
*/
let a = [10, 20, 30, 10, 20, 30];
let b = [30, 20, 10, 20, 30, 10];
let count = 0;
let count2 = 0;
for(let i = 0; i < a.length; i++){
for(let j = 0; j < b.length; j++){
if(a[i] == b[j]){
count++;
}
}
}
for(let i = 0; i < a.length; i++){
for(let j = 0; j < b.length; j++){
if(b[i] == a[j]){
count2++;
}
}
}
if(count == count2){
document.write("같음");
}
else{
document.write("다름");
}
</script>
이차반복문5_문제15_토탈배수맥스.html
<script>
/*
[문제]
[1] 1~50 사이의 랜덤 숫자 중 3의 배수 3개의 합을 total에 추가한다.
[2] 위 내용을 총 다섯 번 반복한다.
[3] 합이 가장 큰 수를 변수 max에 저장하시오.
[예시]
27 27 18 = 72
30 24 15 = 69
6 12 45 = 63
45 27 48 = 120
30 18 27 = 75
max = 120
*/
let total = [];
let max = 0;
for(let i = 0; i < 5; i++){
let sum = 0;
for(let j = 0; j < 3; j++){
let r = Math.floor(Math.random() * 50 )+ 1;
if(r % 3 == 0){
sum += r;
} else {
j--;
}
}
total.push(sum);
document.write("total = " + total + "<br>" );
if(max < sum){
max = sum;
}
}
document.write("top = " + max);
</script>
'코딩 > 2023 JavaScript Console' 카테고리의 다른 글
2023.08.05 / Step 8 [이차배열] - 코딩 17 일차 (0) | 2023.08.05 |
---|---|
2023.08.04 / Step 8 [이차배열] - 코딩 16 일차 (0) | 2023.08.04 |
2023.08.02 / Step 7 [이차반복문] - 코딩 14 일차 (0) | 2023.08.02 |
2023.08.01 / Step 7 [이차반복문] - 코딩 13 일차 (0) | 2023.08.01 |
2023.07.31 / Step 6 [배열] - 코딩 12 일차 (0) | 2023.07.31 |