풀스택 개발자 과정 40일차

너구·2026년 7월 2일

풀스택 성장과정

목록 보기
43/79

Array Test

배열 기초

package Day03;

public class ArrayTest {
    static void main() {

        int[] a = new int[5];
        // a[0] = 0
        // a[1] = 0
        // a[2] = 0
        // a[3] = 0
        // a[4] = 0

        a[0] = 10;
        a[1] = 20;
        a[2] = 30;
        a[3] = 40;
        a[4] = 50;

        int[] b = new int[1000];
        for (int i = 0; i < b.length; i++) {
            b[i] = 10 * (i +1);
        }

        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i]);
        }

        //         [0] [1] [2]
        int[] c = {10, 20, 30};
    }
}

Q1

package Day03;

import java.util.Random;

public class Q1 {
    static void main() {

        Random r = new Random();

        int[] a = new int[10];
        int max = 0;

        for (int i = 0; i < a.length; i++) {
            a[i] = r.nextInt(11);
            if (max < a.length) {
                max = a[i];
            }
            // System.out.print(a[i]);

            // 시간부족으로 다 못풀었다.
        }
    }
}

시간이 부족해서 문제를 다 못풀었다!

Q1_선생님 풀이

package Day03;

import java.util.Random;

public class Q1_1 {
    static void main() {
        // 10개의 값을 담는 배열 생성(int)
        // 각 배열안에 인덱스 값에 난수를 대입
        // 최대값을 찾고
        // 최대값을 가지고 index를 출력
        Random r = new Random();
        int[] array = new int[10];
        int max = 0;

        for (int i = 0; i < array.length; i++) {
            array[i] = r.nextInt(11);
            if (max < array[i]) {
                max = array[i];
            }
            System.out.println("arry[" + i + "] : " + array[i]);
        }

        for (int i = 0; i < array.length; i++) {
            if (array[i] == max) {
                System.out.println("index: " + i);
            }
        }
    }
}

MultiArrayTest

package Day03;

public class MultiArrayTest {
    static void main() {

        int[][] arr = new int[5][5];

        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[0][0]);

        int num = 1;

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = num++;
                System.out.print("arr[" + i + "][" + j + "]: " + arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

Q2

길이가 5인 정수형 배열을 생성한 후, 다음 조건을 만족하는 프로그램을 작성하시오.

조건
배열에 1~9 사이의 랜덤한 숫자를 저장하시오.
중복된 숫자는 허용하지 않는다.
배열의 내용을 출력하시오. (정렬 전)
배열의 값을 오름차순으로 정렬하시오.
정렬된 배열을 다시 출력하시오.

package Day03;

import java.util.Random;

public class Q2 {
    static void main() {

        Random r = new Random();
        int[] arr = new int[5];

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                arr[j] = j;
            }
            System.out.println("a[" + arr[i] + "]" + " = " + r.nextInt(11));
        }

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[j] == arr[i]) {
                    i--;
                    break;
                }
            }
        }
    }
}

이 문제 또한 시간 부족으로 풀지 못했다.

Q2_선생님 풀이

package Day03;

import java.util.Random;

public class Q2_1 {
    static void main() {
        // 1. 랜덤값을 각각 배열에 값을 채울 때 중복 x
        System.out.println("정렬 전======================================");
        Random r = new Random();
        int[] array = new int[5];
        for (int i = 0; i < array.length; i++) {
            array[i] = r.nextInt(9)+1; //1~9
            for (int j = 0; j < i; j++) {
                if (array[i] == array[j]) {
                    i--;
                    break;
                }
            }
        }

        for (int i = 0; i < array.length; i++) {
            System.out.println("array[" + i + "] : " + array[i]);
        }

        // 정렬
        for (int i = 0; i < array.length; i++) {
            for (int j = i+1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    int temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }

        System.out.println("정렬 후======================================");

        // 출력
        for (int i = 0; i < array.length; i++) {
            System.out.println("array[" + i + "] : " + array[i]);
        }
    }
}

Q3

비행기 좌석 예약 시스템을 작성하시오.

비행기에는 9행 2열의 좌석이 있다. 사용자가 원하는 좌석을 입력하여 예약하는 프로그램을 작성하시오.

조건
좌석은 9행 2열의 2차원 배열로 관리한다.
0 : 빈 좌석
1 : 예약된 좌석
처음에는 모든 좌석이 비어 있다.
사용자는 예약할 행과 열을 입력한다.
입력한 좌석이 비어 있으면
예약 처리한다.
남은 좌석 수를 1 감소시킨다.
예약 완료 메시지를 출력한다.
이미 예약된 좌석이면
예약하지 않는다.
현재 비어 있는 모든 좌석을 출력한다.
존재하지 않는 좌석을 입력하면
"잘못된 입력입니다."를 출력한다.
모든 좌석이 예약될 때까지 프로그램을 반복 실행한다.

이 문제는 아예 손도 못대고 문제 풀이시간에 기초 for문 공부를 하였다!

Q3_선생님 풀이

package Day03;

// 비행기 예약 시스템 만들기

import java.util.Scanner;

public class Q3 {
    static void main() {
        // 예약을 해야하기 때문에
        // 좌석 배열, 입력 객체, 남은 좌석을 알려주는 변수
        Scanner sc = new Scanner(System.in); // 입력 객체
        int[][] seat = new int[9][2]; //초기화 0 -> 빈좌석 0 예약좌석 1 좌석 배열
        int count = 18; // 총 예약 가능 수

        while (/*count > 0*/ count != 0) {
            // 0. 예약 입력
            System.out.println("예약하실 좌석을 입력하세요(총 " + count + "석): ");

            int h = sc.nextInt();
            int y = sc.nextInt();

            System.out.println(h + "행");
            System.out.println(y + "열");

            // 올바른 입력
            // h <= 9 && h > 0 ----> 0 < h <= 9
            // y <= 2 && h > 0 ----> 0 < h <= 2
            if (h <= seat.length && h >= 0 && y <= seat[0].length && y > 0) {
                // 1. 예약
                if (seat[h-1][y-1] == 0) {
                    seat[h-1][y-1] = 1;
                    count--;
                    System.out.println(h + "행, " + y + "열 예약이 완료되었습니다.");
                // 2. 예약된 자리 예약시 빈 좌석 출력
                } else {
                    for (int i = 0; i < seat.length; i++) {
                        for (int j = 0; j < seat[i].length; j++) {
                            if (seat[i][j] == 0) {
                                System.out.println("비어있는 좌석: " + (i+1) + "행" + (j+1) + "열");
                            }
                        }
                    }
                }
            // 잘못된 입력
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }
}

기초 다지기 문제(1)

package Practice;

public class Q1 {
    static void main() {

        /*
        1부터 100까지 출력하되 다음 조건을 만족하시오.

        조건
        4의 배수는 출력하지 않는다
        대신 4의 배수 자리에는 "X"를 출력한다
        한 줄로 출력 (공백으로 구분)
         */

        for (int i = 1; i <= 100; i++) {
            if (i % 3 == 0) {
                System.out.print("X ");
            } else {
                System.out.print(i + " ");
            }
        }
    }
}

기초 다지기 문제(2)

package Practice;

public class Q2 {
    static void main() {

        /*
        1부터 100까지 출력하되 다음 조건을 만족하시오.

        3의 배수 → "A"
        5의 배수 → "B"
        3과 5의 공배수 → "AB"
        나머지는 숫자 그대로 출력
         */

        for (int i = 1; i <= 100; i++) {
            if (i % 4 == 0) {
                System.out.print("X ");
            } else {
                System.out.print(i + " ");
            }
        }
    }
}

기초 다지기 문제(3)

package Practice;

public class Q3 {
    static void main() {

        /*
        길이 10짜리 배열을 만들고 다음 조건을 만족하시오.

        배열에는 1부터 10까지 순서대로 저장
        출력할 때는 다음 규칙 적용
        짝수는 "EVEN" 출력
        홀수는 숫자 그대로 출력
         */

        for (int i = 1; i <= 100; i++) {
            if (i % 15 == 0) {
                System.out.print("AB ");
            } else if (i % 3 == 0) {
                System.out.print("A ");
            } else if (i % 5 == 0) {
                System.out.print("B ");
            } else {
                System.out.print(i + " ");
            }
        }
    }
}

기초 다지기 문제(4)

package Practice;

public class Q4 {
    static void main() {

        /*
        길이 10짜리 배열을 만들고 다음 조건을 만족하시오.

        배열에는 1부터 10까지 순서대로 저장
        출력할 때는 다음 규칙 적용
        짝수는 "EVEN" 출력
        홀수는 숫자 그대로 출력

        [0] [1]    [2] [3]    [4] [5]    [6] [7]    [8] [9]
        [1] [EVEN] [3] [EVEN] [5] [EVEN] [7] [EVEN] [9] [EVEN]
         */

        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            arr[i] = i +1;
            if (arr[i] % 2 == 0) {
                System.out.print("EVEN ");
            } else {
                System.out.print(arr[i] + " ");
            }
        }
    }
}

Q4

숫자 맞추기 게임을 작성하시오.

컴퓨터는 1부터 100 사이의 랜덤한 숫자를 하나 생성하고, 사용자가 그 숫자를 맞추는 프로그램을 작성하시오.

조건
컴퓨터는 1 ~ 100 사이의 랜덤 숫자를 1개 생성한다.
Random 사용
사용자는 숫자를 입력한다.
입력한 숫자에 따라 다음을 출력한다.
입력값이 정답보다 크면 → "다운"
입력값이 정답보다 작으면 → "업"
입력값이 정답과 같으면 → "맞췄습니다. 축하합니다."
입력한 숫자가 1~100 범위를 벗어나면
"잘못된 숫자입니다." 출력
정답을 맞출 때까지 반복한다.

package Day03;

import java.util.Random;
import java.util.Scanner;

public class Q4 {
    static void main() {

        Random r = new Random();
        int com = r.nextInt(100) + 1;

        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.print("숫자를 입력하세요: ");
            int user = sc.nextInt();
            if (user >= 1 && user <= 100) {
                if (user == com) {
                    System.out.println("맞췄습니다. 축하합니다.");
                    break;
                } else if (user > com) {
                    System.out.println("다운");
                    continue;
                } else {
                    System.out.println("업");
                    continue;
                }
            } else {
                System.out.println("잘못된 숫자입니다.");
                continue;
            }
        }
    }
}

이 문제는 시간 안에 다 풀었다! 나는 if문은 생각보다 괜찮은데 for문이 어려운 거 같다.

Q4_1 선생님 풀이

package Day03;

import java.util.Random;
import java.util.Scanner;

public class Q4_1 {
    static void main() {

        // 1. Random 객체 필요
        Random r = new Random();
        // 2. Scanner 객체 필요
        Scanner sc = new Scanner(System.in);
        // 3. com 난수값 받기 -> 1회성 바뀌면 맞출 수 없다.
        int com = r.nextInt(100) +1;
        System.out.println("Com: " + com);

        // 맞출 때까지 -> 무한루프 -> 추후에 if 조건 break; 할거야
        while (true) {
            int user = sc.nextInt();
            if (com > user) {
                System.out.println("업");
            } else if (com < user) {
                System.out.println("다운");
            } else {
                System.out.println("정답입니다.");
                break;
            }
        }
    }
}

기초 다지기 문제(5)

1부터 100까지 출력하되 다음 조건을 만족하시오.

📌 조건
숫자가 5의 배수이면 해당 숫자를 출력하지 않는다
대신 "SKIP"을 출력한다
나머지는 그대로 숫자를 출력한다
단일 for문 사용

package Practice;

public class Q5 {
    static void main() {

        for (int i = 1; i <= 100; i++) {
            if (i % 5 == 0) {
                System.out.print("SKIP ");
            } else {
                System.out.print(i + " ");
            }
        }
    }
}

기초 다지기 문제(6)

1부터 100까지 출력하되 다음 조건을 만족하시오.

📌 조건
3의 배수 → "A"
5의 배수 → "B"
3과 5의 공배수 → "AB"
단, 7의 배수는 출력하지 않는다 (SKIP 처리)
나머지는 숫자 출력

package Practice.Day1;

public class Q6 {
    static void main() {

        for (int i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                System.out.print("SKIP");
            } else if (i % 15 == 0) {
                System.out.print("AB ");
            } else if (i % 3 == 0) {
                System.out.print("A ");
            } else if (i % 5 == 0) {
                System.out.print("B ");
            } else {
                System.out.print(i + " ");
            }
        }
    }
}

마무리

오늘은 복잡한 if문과 for문 그리고 배열까지 배웠다.
초반에 수박 겉핥기 식으로 배운 것과는 차원이 다르게 어려워서 이해하는 시간이 오래걸렸다.
실제로 문제를 풀면서 다 못 푼 문제도 있었고 손도 못 댄 문제도 있었다.
이렇게 다시 배우면서 내가 어느 부분이 부족한지를 알게 되었다.
if문은 어느정도 활용이 가능한데 for문은 아예 활용이 불가능하다.
그래서 for문을 중점적으로 공부하며 기초를 다지는 시간을 가지기로 했다.
앞으로 할 게 산더미처럼 쌓여있지만 새로운 것들을 배워나가고 문제를 풀어가며 뿌듯함과 재미를 느낀다.
내년 이맘때쯤 내가 궁금해지게 되었다.

열심히 하자!

0개의 댓글