라라리라

2023.08.07 / Step 8 [이차배열] - 코딩 19 일차 본문

코딩/2023 JavaScript Console

2023.08.07 / Step 8 [이차배열] - 코딩 19 일차

헤실 2023. 8. 7. 21:07

이차배열5_문제01_빙고.html

 

<script>

    /*
        [문제]
            철수는 빙고 게임을 만들고 있다.
            빙고 조건은 가로 1이 3개 또는 세로 1이 3개
            또는 대각선으로 1이 3개이면 빙고이다.
            빙고는 중첩될 수 있다.
            반복적으로 랜덤 위치에 1을 저장한다.
            단, 한번 1이 저장된 곳은 또 다시 저장할 수 없다.
            3빙고가 성립되면 종료한다.    
    */

    let bingo = [
        [0,0,0],
        [0,0,0],
        [0,0,0]
    ];
   
    while(true){
        let r1 = Math.floor(Math.random() * bingo.length);
        let r2 = Math.floor(Math.random() * bingo.length);
        if(bingo[r1][r2] != 0){
            continue;
        } else {
            bingo[r1][r2] = 1;
        }
        document.write("x = " + r1 + "y = " + r2 + "<br>");
        let count = 0;
       
        //가로
        for(let i = 0; i <bingo.length; i++){
            let cnt = 0;
            for(let j = 0; j < bingo[i].length; j++){
                if(bingo[i][j] == 1){
                    cnt++;
                }
            }
            if(cnt == 3){
                count++;
                document.write("빙고(가로) 완성!!!<br>")
            }
        }
        //세로
        for(let i = 0; i < bingo.length; i++){
            let cnt = 0;
            for(let j = 0; j < bingo.length; j++){
                if(bingo[j][i] == 1){
                    cnt++;
                }
            }
            if(cnt == 3){
                count++;
                document.write("빙고(세로) 완성!!!<br>")
            }
        }
        //대각선 왼쪽
        if(bingo[0][0]== 1 && bingo[1][1] == 1 && bingo[2][2] == 1){
            count++;
            document.write("빙고(대각선 왼쪽) 완성!!!<br>")
        }
        if(bingo[0][2]== 1 && bingo[1][1] == 1 && bingo[2][0] == 1){
            count++;
            document.write("빙고(대각선 오른쪽) 완성!!!<br>")
        }


        for(let i = 0; i < bingo.length; i++){
            document.write(bingo[i] + "<br>");
        }
        if(count >= 3){
            break;
        }

    }

   

</script>

 


이차배열5_문제02_숫자이동.html

 

<script>

    /*
        [문제]
            철수는 게임을 만들고 있다.
            game배열은 이차원으로 되어있다.
            숫자8은 플레이어 위치를 뜻한다.
            숫자0은 플레이어가 움직일 수 있는 위치이다.
           
            order배열은 플레이어가 움직이게 하는 명령어이다.
            1,2,3,4는 차례대로 북, 동, 남, 서를 뜻한다.

            order의 이동대로 플레이어를 이동시키고 출력하시오.
            플레이어가 벽에 붙어서,
            더 이상 원하는 방향으로 이동할 수 없을 때는 "이동 불가"를 출력한다.
        [정답]        
            캐릭터의 현재 위치 = 2 , 2
            0 0 0 0 0
            0 0 0 0 0
            0 0 8 0 0
            0 0 0 0 0
            0 0 0 0 0

            북
            0 0 0 0 0
            0 0 8 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0

            남
            0 0 0 0 0
            0 0 0 0 0
            0 0 8 0 0
            0 0 0 0 0
            0 0 0 0 0

            남
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 8 0 0
            0 0 0 0 0

            남
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 8 0 0

            서
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 8 0 0 0

            남
            이동 불가
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 8 0 0 0

            남
            이동 불가
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 8 0 0 0

            서
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            8 0 0 0 0

            동
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 0 0 0 0
            0 8 0 0 0    
    */
   
    let game = [
        [0,0,0,0,0],
        [0,0,0,0,0],
        [0,0,8,0,0],
        [0,0,0,0,0],
        [0,0,0,0,0]
    ];

    let order = [1,3,3,3,4,3,3,4,2];

    let x = 2;
    let y = 2;

   

   

       
    for(let k = 0; k < order.length; k++){
        if(order[k] == 1){
                if(y != 0){
                    game[y][x] = 0;
                    y--;    
                    game[y][x] = 8;
                    document.write("북으로 이동<br>");
                } else {
                    document.write("이동 불가<북><br>");
                }
            }
            else if(order[k] == 2){
                if(x != 4){
                    game[y][x] = 0;
                    x++;
                    game[y][x] = 8;
                    document.write("동으로 이동<br>");
                } else {
                    document.write("이동 불가<동><br>");
                }
            }
            else if(order[k] == 3){
                if(y != 4){
                    game[y][x] = 0;
                    y++;
                    game[y][x] = 8;
                    document.write("남으로 이동<br>");
                } else {
                    document.write("이동 불가<남><br>");
                }
            }
            else if(order[k] == 4){
                if(x != 0){
                    game[y][x] = 0;
                    x--;
                    game[y][x] = 8;
                    document.write("서로 이동<br>");
                } else {
                    document.write("이동 불가<서><br>");
                }
            }
            for(let i = 0; i < game.length; i++){
                document.write(game[i] + "<br>")
            }
            document.write("<br>==================================================<br>")
           
    }





</script>

 


이차배열5_문제03_우회전.html

 

<script>

    /*
        [문제]
            랜덤(1~4)를 저장한다. 랜덤숫자는 회전 횟수이다.
            회전 횟수만큼 block의 숫자들을 90도로 우회전시키시오.
           
        [예시]
            rNum = 4
            1 2 3
            4 5 6
            7 8 9

            7 4 1
            8 5 2
            9 6 3

            9 8 7
            6 5 4
            3 2 1

            3 6 9
            2 5 8
            1 4 7    
    */

    let block = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];

    let rNum = Math.floor(Math.random() * 4) + 1;
    document.write("rNum = " + rNum + "<br>");
    let size = block.length;
        for(let l = 0 ; l < rNum; l++){
           
            for(let i = 0 ; i < size; i++){
                document.write(block[i] + "<br>");
            }
            document.write("<br>");
            let temp = [];
            for(let i = 0; i < size; i++){
                let unit = [];
                for(let j = 0; j < size; j++){
                    unit.push(block[i][j]);
                }
                temp.push(unit);
            }
            for(let i = 0; i < size; i++){
                for(let j = 0; j < size; j++){
                    block[i][j] = temp[2 - j][i];
                }
            }
        }

</script>

 


이차배열5_문제04_자리별분리.html

 

<script>

    /*
        [문제]
            랜덤으로 10000 ~ 99999 사이의 랜덤숫자를 저장하고
            다음 규칙에 따라 결과를 출력하시오.
            랜덤숫자를 두 개로 분리하는데
            한 자리씩 늘리면서 분리한다.
            각 분리한 숫자의 합을 출력한다.
        [예시]
            r = 34567
        [결과]
            3 + 4567
            34 + 567
            345 + 67
            3456 + 7    
    */

   

    let r = Math.floor(Math.random() * 90000) + 10000;
    document.write("r = " + r + "<br>");



    let div = 10000;
    while(true){
       
        let temp = r ;

        let x = parseInt(temp / div);
        let y = temp % div;

        document.write(x + " + " + y + "<br>");

        div /= 10;

        if(div == 1){
            break;
        }

    }



</script>

 


이차배열5_문제05_좌회전.html

 

<script>

    /*
        [문제]
            랜덤(1~4)를 저장한다. 랜덤숫자는 회전 횟수이다.
            회전 횟수만큼 block의 숫자들을 90도로 좌회전시키시오.
        [예시]
            rNum = 4
            1 2 3
            4 5 6
            7 8 9

            3 6 9
            2 5 8
            1 4 7

            9 8 7
            6 5 4
            3 2 1

            7 4 1
            8 5 2
            9 6 3    
    */

    let block = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];


    let r = Math.floor(Math.random() * 4) + 1;
    document.write("r = " + r + "<br>");
    let size = 3;
    for(let l = 0; l < r; l++){
        for(let i = 0; i < size; i++){
            document.write(block[i] + "<br>");
        }
        document.write("<br>");
        let temp = [];
        for(let i = 0; i < size; i++){
            let unit = [];
            for(let j = 0; j < size; j++){
                unit.push(block[i][j]);
            } temp.push(unit);
        }
        for(let i = 0; i < size; i++){
            for(let j = 0; j < size; j++){
                block[i][j] = temp[j][2 - i];
            }
        }

    }

</script>

 


이차배열5_문제06_철수마블.html

 

<script>

    /*
        [문제]
            철수는 게임을 만들고 있다.
            (1~6 사이의 랜덤 숫자)주사위를 던져
            해당 숫자만큼 캐릭터를 이동시킨다.
            단, 캐릭터는 외곽으로만 움직일 수 있다.
            두 바퀴를 돌고 게임을 끝내시오.
        [예시]
            옷 □ □ □ □
            □ ■ ■ ■ □  
            □ ■ ■ ■ □  
            □ ■ ■ ■ □  
            □ □ □ □ □  

            dice = 2  
            □ □ □ 옷 □
            □ ■ ■ ■ □  
            □ ■ ■ ■ □  
            □ ■ ■ ■ □  
            □ □ □ □ □  

            dice = 3  
            □ □ □ □ □  
            □ ■ ■ ■ □  
            □ ■ ■ ■ 옷
            □ ■ ■ ■ □  
            □ □ □ □ □  

            dice = 3  
            □ □ □ □ □  
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ □ 옷 □

            dice = 1
            □ □ □ □ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ 옷 □ □

            dice = 6
            옷 □ □ □ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ □ □ □

            dice = 5
            □ □ □ □ □
            □ ■ ■ ■ 옷
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ □ □ □

            dice = 1
            □ □ □ □ □
            □ ■ ■ ■ □
            □ ■ ■ ■ 옷
            □ ■ ■ ■ □
            □ □ □ □ □

            dice = 4
            □ □ □ □ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ 옷 □ □

            dice = 4
            □ □ □ □ □
            □ ■ ■ ■ □
            옷 ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ □ □ □

            dice = 4
            □ □ 옷 □ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ ■ ■ ■ □
            □ □ □ □ □    
    */

    let map = [
        [0,  1,  2,  3,  4],
        [15, 16, 16, 16, 5],
        [14, 16, 16, 16, 6],
        [13, 16, 16, 16, 7],
        [12, 11, 10,  9, 8],
    ]

    let player = 0;
    let wall = 16;
    let count = 0;

   
    while(true){

        for(let i = 0; i< map.length; i++){
            for(let j = 0; j < map[i].length; j++){
        if(player == map[i][j]){
            document.write(" 옷 ");
        } else if(wall == map[i][j]){  
            document.write(" ■ ");
        } else {
            document.write(" □ ");
        }
    }
        document.write("<br>");
    }
    document.write("<br><br>");

    if(count == 2){
        break;
    }

    let r = Math.floor(Math.random() * 6) + 1;
    document.write("주사위 = " + r + "<br>");

    player += r;
    if(player >= 16){
        player %= 16
        count++
    }



}
   

</script>

 


이차배열5_문제07_퍼즐게임.html

 

<script>

    /*
        [문제]
            철수는 게임을 만들고 있다.
            game배열은 이차원으로 되어있다.
            game배열은 안에 block배열의 숫자를 채워 넣는 게임이다.

            배열의 값1은 block이 차 있는 것을 의미한다.
            배열의 값0은 block이 비어있는 것을 의미한다.
        [조건1]
            block은 이번에 제시된 모양이다.
            block의 모양을 game 배열에 넣을 수 있다면 채워 넣고,
            넣을 수 없다면 "gameover"를 출력하시오.
        [조건2]
            block을 채워 넣었을 때 가로로 1이 연속 5개이거나,
            세로로 1이 연속 5개이면 그 줄은 전부 숫자 2로 변경하시오.
        [정답]    
            [0, 2, 0, 1, 0]
            [1, 2, 0, 1, 1]
            [0, 2, 1, 1, 1]
            [1, 2, 1, 1, 0]
            [0, 2, 1, 0, 0]        
    */

    let game = [
        [0,1,0,1,0],
        [1,1,0,1,1],
        [0,1,1,1,1],
        [1,1,0,1,0],
        [0,0,0,0,0]
    ];

    let block = [
        [0,1],
        [1,1]
    ];

    let x = 0;
    let y = 0;

    let check = false;
    for(let i = 0; i < game.length - 1; i++){
        for(let j = 0; j < game[i].length - 1; j++){
            let count = 0;
            if(game[i][j + 1] == 0){
                count++;
            }
            if(game[i + 1][j] == 0){
                count++;
            }
            if(game[i + 1][j + 1] == 0){
                count++;
            }
            if(count == 3){
                x = j;
                y = i;
                check = true;
                break;
            }
        }
    }  
    if(check == false){
        document.write("== game over ==");
    } else {
       
        for(let i = 0; i < game.length; i++){
                game[y][x + 1] = 1;
                game[y + 1][x] = 1;
                game[y + 1][x + 1] = 1;
                document.write(game[i] + "<br>");
            }
            document.write("<br>");
            let temp = [];
            for(let i = 0; i < game.length; i++){
                let index = [];
                for(let j = 0; j < game[0].length; j++){
                    index.push(game[i][j]);
                }
                temp.push(index);
            }
           
            for(let i = 0 ; i < game.length; i++){
           
            let count = 0;
            let count2 = 0;
            for(let j = 0; j < game[i].length; j++){
                if(game[i][j] == 1){
                    count++;
                }
            }
            for(let j = 0; j < game[i].length; j++){
                if(game[j][i] == 1){
                    count2++;
                }
            }
            for(let j = 0 ; j < game[i].length; j++){
                if(count == 5){
                    temp[i][j] = 2;
                }
                if(count2 == 5){
                    temp[j][i] = 2;
                }
            }
    }   game = temp;
       
        for(let i = 0; i < game.length; i++){
            document.write(game[i] + "<br>");
        }
    }


</script>

 


이차배열5_문제08_복권셋트.html

 

<script>

    /*
        [문제]
            복권 1개당 7칸으로, 총 5개의 복권을 제작하려 한다.
            복권 1줄은 1 또는 7의 랜덤 숫자로 구성되어 있다.
            7이 연속으로 3개 이상이면 "당첨"이고, 그 미만은 "꽝"이다.
            5개 중에 딱 1개만 당첨 복권이고 나머지 4개는 꽝인 복권을
            랜덤으로 생성해서 출력하시오.
        [예시]
            1177117 (꽝)
            1117771 (당첨)
            7171117 (꽝)
            7711771 (꽝)
            7171717 (꽝)    
    */

    let lotto = [0, 0, 0, 0, 0];

    let index = 0;
    let mark = 0;

    while(true){
        let temp = [];
        for(let i = 0; i < 7; i++){
            let r = Math.floor(Math.random() * 2);
            if(r == 0){
                r = 7;
            }
            temp.push(r);
        }
        document.write(temp + " ");
        lotto[index] = temp;
        let count = 0;
        for(let i = 0; i < 7; i++){  
        if(lotto[index][i] == 7){
            count++;
        }
    }
    if(count >= 3){
        document.write("당첨<br>");
        mark++;
    } else {
        document.write("꽝<br>")
    }
    index++;

    if(index == 5 && mark == 1){
        break;
    } else if (index == 5 && mark == 0){
        index = 0;
        mark = 0;
    }
    else if(index == 5 && mark > 1){
        index = 0;
        mark = 0;
    }
}

document.write("<br>=====================================<br>");

for(let i = 0; i < lotto.length; i++){
    let cnt = 0;
    for(let j = 0; j < lotto[i].length; j++){
        document.write(lotto[i][j] + " , ");
        if(lotto[i][j] == 7){
            cnt++;
        }
    }
    if(cnt >= 3){
        document.write(" = 당첨 ");
    } else {
        document.write(" = 꽝 ");
    }
    document.write("<br>");
}


   


</script>

 


이차배열5_문제09_구의개수.html

 

<script>

    /*
        [문제]
            mine배열 숫자 0의 자리에 숫자를 저장하려 한다.
            저장할 숫자는 주변 8방향을 검사 후 9의 개수를 저장해야 한다.
            저장 후 mine배열를 출력하시오.
               
        [정답]
            [2,9,2],
            [9,4,9],
            [1,3,9]    
    */

    let mine = [
        [0, 9, 0],
        [9, 0, 9],
        [0, 0, 9]
    ];
    /*
    let temp = [];
    for(let i = 0; i < 3; i++){
        temp.push(mine[i]);
    } //temp 지정
      for(let i = 0; i < mine.length; i++){
        for(let j = 0; j < mine[i].length; j++){
            let count = 0;
            if(mine[i][j] == 0){ //mine 배열의 i j 가 0일경우

            if(j + 1 < 3 && mine[i][j + 1] == 9  ){ //오른쪽
                count++;
            }
            if(i + 1 < 3 && j + 1 < 3 && mine[i + 1][j + 1] == 9 ){ //오른쪽 아래 대각선
                count++;
            }
            if(i + 1 < 3 && mine[i + 1][j] == 9){ //바로 아래
                count++;
            }
            if(j - 1 >= 0 && i + 1 < 3 && mine[i + 1][j - 1] == 9     ){ // 왼쪽 아래 대각선
                count++;
            }
            if(j - 1 >= 0 && mine[i][j - 1] == 9  ){ // 왼쪽
                count++;
            }
            if(i - 1 >= 0 && j - 1 >= 0 && mine[i - 1][j - 1] == 9   ){ // 왼쪽 위 대각선
                count++;
            }
            if(i - 1 >= 0 && mine[i - 1][j] == 9  ){ // 위
                count++;
            }
            if(i - 1 >= 0 && j + 1 < 3 && mine[i - 1][j + 1] == 9    ){ // 오른쪽 위 대각선
                count++;
            }
            mine[i][j] = count;
        }
        }

    }
    for(let i = 0; i < mine.length; i++){
        document.write(mine[i] + "<br>");
    }
    */
    for(let i = 0; i < mine.length; i++){
        for(let j = 0; j < mine.length; j++){
            let count = 0;
            if(mine[i][j] == 0){
                for(let y = -1; y <= 1; y++){
                    for(let x = -1; x <= 1; x++){
                        if(y + i >= mine.length || y + i < 0) continue;
                        if(x + j >= mine.length || x + j < 0) continue;
                        if(mine[i + y][j + x] == 9){
                            count++;
                        }
                    }
                }
                mine[i][j] = count;
            }
        }
    }
    for(let i = 0; i < mine.length; i++){
        document.write(mine[i] + "<br>");
    }

</script>

 


이차배열5_문제10_체스비숍.html

 

<script>

    /*
        [문제]
            세로 가로 인덱스 두 개를 랜덤으로 저장한다.
            그 인덱스를 기점으로 대각선 방향으로 전부 1로 채운 후 출력하시오.
        [예시]
            y = 2
            x = 1
               
            [0,0,0,1,0]
            [1,0,1,0,0]
            [0,1,0,0,0]
            [1,0,1,0,0]
            [0,0,0,1,0]    
    */

    let list = [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ];


    let y = Math.floor(Math.random() * list.length);
    let x = Math.floor(Math.random() * list[0].length);
    document.write("y = " + y + "<br>x = " + x + "<br>");

            list[y][x] = 1; //좌표 1로 변경;

            let tempx = x;
            let tempy = y;
           
    //왼쪽위로;
    while(true){
        if(tempx == 0 || tempy == 0){
            break;
        }
        tempx--;
        tempy--;
        list[tempy][tempx] = 1;
    }
    tempx = x;
    tempy = y;
    //왼쪽아래로;
    while(true){
        if(tempx == 0 || tempy == 4){
            break;
        }
        tempx--;
        tempy++;
        list[tempy][tempx] = 1;
    }
    tempx = x;
    tempy = y;
    //오른쪽위로;
    while(true){
        if(tempx == 4 || tempy == 0){
            break;
        }
        tempx++;
        tempy--;
        list[tempy][tempx] = 1;
    }
    tempx = x;
    tempy = y;
    //오른쪽아래로;
    while(true){
        if(tempx == 4 || tempy == 4){
            break;
        }
        tempx++;
        tempy++;
        list[tempy][tempx] = 1;
    }
    tempx = x;
    tempy = y;

    for(let i = 0; i < list.length; i++){
        document.write(list[i] + "<br>");
    }
     

</script>

 


이차배열5_문제11_체스킹.html

 

<script>

    /*
        [문제]
            세로 가로 인덱스 두개를 랜덤으로 저장한다.
            그 인덱스를 기점으로 십자가 방향으로 전부 1로 채운 후 출력하시오.
        [예시]
            y = 1 , x = 4
            [0, 0, 0, 0, 1]
            [1, 1, 1, 1, 1]
            [0, 0, 0, 0, 1]
            [0, 0, 0, 0, 1]
            [0, 0, 0, 0, 1]    
    */

    let list = [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ];

    let x = Math.floor(Math.random() * list.length);
    let y = Math.floor(Math.random() * list.length);

    document.write("x = " + x + "<br>y = " + y + "<br>");

    for(let i = 0; i < list.length; i ++){
        for(let j = 0; j < list.length; j++){
            list [y][j] = 1;
            list [i][x] = 1;
        }
    }
    for(let i = 0; i< list.length; i++){
        document.write(list[i] + "<br>");
    }

</script>

 


이차배열5_문제12_체스퀸.html

 

<script>

    /*
        [문제]
            세로 가로 인덱스 두개를 랜덤으로 저장한다.
            그 인덱스를 기점으로 대각선 + 십자가 방향으로 전부 1로 채운 후 출력하시오.
        [예시]
            y = 3, x = 0
           
            [1, 0, 0, 1, 0]
            [1, 0, 1, 0, 0]
            [1, 1, 0, 0, 0]
            [1, 1, 1, 1, 1]
            [1, 1, 0, 0, 0]    
    */

    let list = [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ];

    let x = Math.floor(Math.random() * list.length);
    let y = Math.floor(Math.random() * list.length);

    list[y][x] = 1;
    document.write("x = " + x + "y = " + y + "<br>");

    for(let i = -1; i <= 1; i++){
        for(let j = -1; j <= 1; j++){
            let tempi = i;
            let tempj = j;
            if(i == 0 && j == 0) continue;
        while(true){
            if(tempi + y >= list.length || tempi + y < 0) break;
            if(tempj + x >= list.length || tempj + x < 0) break;
            list[tempi + y][tempj + x] = 1;
            tempi += i;
            tempj += j;
        }
        }
    }
    for(let i = 0; i < list.length; i++){
        document.write(list[i] + "<br>");
    }
   

</script>

 


이차배열5_문제13_랜덤숫자조합.html

 

<script>

    /*
        [문제]
            철수는 게임을 만들려고 한다.
            숫자 다섯 개를 랜덤(1~9사이의 숫자)으로 저장한다.
            각각의 숫자는 중복이 되면 안된다.

            각각의 숫자로 랜덤 조합을 4가지 만들어서
            numList에 저장하고, 전체 합을 출력하시오.
            랜덤 조합 역시 중복이 되면 안된다.
        [예시]
            1, 3, 5, 7, 9 라고 했을 때
            [1] 13597
            [2] 51397
            [3] 37951
            [4] 91537

            정답 : 13597 + 51397 + 37951 + 91537 = 194482    
    */

    let numList = [];
    let temp = [];
    let total = 0;
    for(let i = 0; i < 5; i++){
        let check = false;
        let r = Math.floor(Math.random() * 9) + 1;
        for(let j = 0; j < temp.length; j++){
            if(temp[j] == r) check = true;
        }
        if(check == false){
            temp.push(r);
        } else if(check){
            i--;
        }
    }
    document.write("temp =" + temp + "<br>");

    for(let i = 0; i < 4; i++){
        let index = [false, false, false, false, false];
        let temp2 = [];
        for(let j = 0; j < 5; j++){
            let r = Math.floor(Math.random() * 5);
            if(index[r] == false) {
                index[r] = true;
                temp2.push(temp[r]);

            }
            else j--;
        }
        numList.push(temp2);
       
        for(let j = 0; j < numList.length; j++){
            if(i == j) continue;
            else if(numList[i] == numList[j]){
                numList.splice(j, 1);
                i--;
                break;
            }
        }
    }
   
    for(let i = 0; i < numList.length ; i++){
        let unit = 10000;
        let sum = 0;
        for(let j = 0; j < numList[0].length; j++){
            sum += numList[i][j] * unit;
            unit /= 10;
        }
        document.write(sum + "<br>");
        total += sum;
    }
    document.write("total = " + total);
   
</script>

 


이차배열5_문제14_달팽이.html

 

<script>

    /*
        [문제]
            arr 배열에 아래와같이 저장 후 출력하시오.
        [정답]
            1   2   3   4   5  
            16  17  18  19  6  
            15  24  25  20  7  
            14  23  22  21  8  
            13  12  11  10  9    
    */

    let arr = [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]
    ];


    let num = 1;
    let x = 0;
    let y = 0;
    let dir = 0;
    arr[y][x] = num;
    num++;

    while(true){
        let yy = y;
        let xx = x;

        if(dir == 0) xx++;
        else if(dir == 1) yy++;
        else if(dir == 2) xx--;
        else if(dir == 3) yy--;
       
        if((yy >= 5 || yy < 0) || (xx >= 5 || xx < 0)){
            dir++;
            if(dir == 4) dir = 0;
        } else if(arr[yy][xx] != 0){
            dir++;
            if(dir == 4) dir = 0;
        } else {
            y = yy;
            x = xx;
            arr[y][x] = num;
            num++;
        }
        if(num == 26){
            break;
        }
    }
    for(let i = 0; i < arr.length; i++){
        document.write(arr[i] + "<br>");
    }

</script>