[STUDY] 231201 | Java | 배열(array), 난수 생성(random)

Nimgnos·2023년 12월 3일
0

👾 STUDY

목록 보기
11/40
post-thumbnail

📌 난수, 랜덤숫자(Math.random) / 예제 풀기

  • 난수: 정의된 범위 내에서 무작위로 추출된 수. 난수는 누구라도 그 다음에 나올 값을 확신할 수 없어야 함.
  • Java에서 난수 구하는 방법:
    • ① Math.random(): Math 클래스의 random() 메서드 사용
    • ② Random 클래스 활용
  • Math.random() : 0~1까지의 실수 중 랜덤한 수를 전달해 줌.
    • 예) double d = Math.random();을 하면 0.0 <= d < 1 중 임의의 실수 값이 d에 할당된다.

문제 1.

  • Math.random(); 이라는 메소드가 있다. 이 메소드는 0 ~ 1까지 사이의 실수 중 랜덤한 수를 전달해준다. 이를 활용하여 정수형 변수 I에 50 <= I < 100 의 임의의 정수를 저장해보라.
    • 풀이 및 결과
public class Array_배열문제_16 {
    public static void main(String[] args){
        int a = (int)10.5;
        //Math.random() : 0.0 <= x < 1.0 랜덤 실수
        //1~10까지의 정수를 랜덤,
        int rand = (int)(Math.random() * 10 +1);
        System.out.println(rand);
    }
}

📌 배열(array) - 예제 풀기

문제 1.

  • 1, 2, 3, 4, 5, 6 ,7 ,8 로 초기화된 배열을 만들고, 배열의 요소 중 짝수의 개수를 구하는 프로그램을 만드시오.
    • 풀이 및 결과
public class Array_배열문제_10 {
    public static void main(String[] args){
        int[] arr = new int[8]; //배열의 선언
        //초기화된 배열 생성
        for(int i = 1; i < arr.length; i++){
            arr[i] = i + 1;
        }
        //배열의 요소 중 짝수의 개수 구하기
        int cnt = 0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % 2 == 0){
                cnt++;
            }
        }
        System.out.println(cnt);
    }
}

문제 2.

  • scanner로 정수 하나를 입력받아, 입력받은 정수만큼의 길이를 갖는 배열을 생성하고 배열에 각 요소에 1 ~ 입력 받은 정수로 값을 저장한다. 예를 들어 5를 입력했으면 길이가 5인 배열을 만들고 각 요소에 1,2,3,4,5가 들어가야 한다.
    • 풀이 및 결과
public class Array_배열문제_12 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("숫자 입력 : ");
        int num = sc.nextInt();
        int[] arr = new int[num];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

문제 3.

  • 초기값을 5,4,3,2,1로 갖는 배열 arr을 만든다. 그리고 길이가 5인 새로운 정수형 배열newArr을 만든 후 arr이 가진 값을 newArr로 복사하여 보자. 복사 결과는 출력을 통해 확인한다.
    • 풀이 및 결과
public class Array_배열문제_14 {
    public static void main(String[] args){
        int[] arr = {5, 4, 3, 2, 1};
        int[] newArr = new int[arr.length];
        //new int[5]로 설정하면 arr의 데이터가 바뀔 때마다 수정 필요
        for(int i =0; i < newArr.length; i++){
            newArr[i] = arr[i];
        }
        for(int i = 0; i < newArr.length; i++){
            System.out.println(newArr[i]);
        }
    }
}

문제 4.

  • 1, 2, 3을 초기값으로 갖는 배열 arr1과 4,5,6을 초기값으로 갖는 arr2를 만든다. 그 후 새로운 배열 newArr을 만들어 arr1과 arr2의 모든 값을 복사해보자. 복사 후 newArr은 1, 2, 3, 4, 5, 6을 가져야 한다.
    • 풀이 및 결과
public class Array_배열문제_15 {
    public static void main(String[] args){
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {4, 5, 6};
        //1 2 3 4 5 6
        int[] newArr = new int[arr1.length + arr2.length];
        //arr1 배열의 데이터를 newArr에 넣기
        for(int i = 0; i < arr1.length; i++){
            newArr[i] = arr1[i];
        }
        //arr2 배열의 데이터를 newArr에 넣기
        for(int i = 0; i < arr2.length; i++){
            newArr[arr1.length + i] = arr2[i];
        }
        //newArr 데이터 출력
        for(int i = 0; i < newArr.length; i++){
            System.out.print(newArr[i] + " ");
        }
    }
}

문제 5.

  • (난이도 상) 간단한 성적처리 시스템을 만들어보자. 국어, 영어, 수학점수를 입력받아 각 과목에 대한 점수 및 총점, 평균을 출력하는 프로그램을 만들어보자. 반드시 배열을 사용하도록 한다.
    • 풀이 및 결과
public class Array_배열문제_11 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        //국어, 영어, 수학, 총점에 대한 배열(정수)
        //0: 국어, 1: 영어, 2: 수학, 3: 총점
        int[] scores = new int[4];
        double avg;
        //과목명을 저장하고 있는 배열
        String[] subjets = {"국어", "영어", "수학", "총점"};
        //과목 수만큼 반복해서 각 과목의 점수를 입력
        for(int i = 0 ; i < scores.length - 1 ; i++){
            while(true) {
                System.out.print(subjets[i] + "점수 입력 : ");
                scores[i] = sc.nextInt();
                //scores[0] 값이 0~100 사이'면' 반복문을 벗어난다.
                if(scores[i] >= 0 && scores[i] <= 100){
                    //가장 가까운 반복문(for, while)을 벗어남.
                    break;
                }
            }
        }
        //총점 및 평균 계산
        for (int i = 0; i < scores.length - 1; i++){
            scores[scores.length - 1] = scores[scores.length - 1] + scores[i];
        }
        avg = scores[scores.length - 1] / (double)(scores.length - 1);
        //점수 출력
        for(int i = 0; i < scores.length; i++){
            System.out.println(subjets[i] + "점수 : " + scores[i]);
        }
        System.out.println("평균 : " + avg);
    }
}

문제 6.

  • 길이가 100인 배열을 만들고 각 요소의 값을 1 ~ 100으로 변경하자. 그 후 배열에 들어간 수 중 소수만 출력해보자. (소수란 1과 자신의 수로만 나누어 떨어지는 수이다. ex> 2,3,5,7..)
    • 풀이 및 결과
public class Array_배열문제_13 {
    public static void main(String[] args){
        //1~100 중에서 소수를 모두 출력
        int[] arr = new int[100];
        for(int i = 0; i < arr.length; i++){
            arr[i] = i + 1;
        }
        for(int i = 0; i < arr.length; i++){
            int cnt = 0;
            for(int j = 1 ; j < arr[i] ; j++){
                if(arr[i] % j == 0){
                    cnt++;
                    if(cnt > 1){
                        break;
                    }
                }
            }
            if(cnt == 1){
                System.out.println(arr[i]);
            }
        }
    }
}

🍀 회고

  • 선생님의 풀이와 비교해보면서 내가 작성한 코드가 얼마나 비효율적인지 느꼈고, 추후에 수정, 보수 등의 작업을 항상 고려하며 자동화된 코드를 짤 수 있도록 공부해야한다는 것을 알았다.(예: new int[5]로 설정하면 데이터가 바뀔 때마다 손을 대야함 ➡️ new. int[arr.length]로 설정하면 데이터가 바뀌어도 자동으로 수정이 됨.) 좋은 코드를 짜기까지 엄청난 노력과 연습이 필요하겠지만... 실무자가 되려면 당연한거지 뭐 어쩌겠음? 공부나해라.
  • 정식수업 전 선행학습이라기엔 수업 내용이 너무나 많지 않았나 싶다...😫 한 주 동안 선행학습을 하면서 느낀점 1. 나만 말하는 감자인가?🥔 왜 나빼고 다 이해하는 것 같지? 2. 쥐꼬리만큼이라도 예습하길 잘했다. 그리고 기왕 예습하는 거 좀 더 공부 많이 해서 수업에 들어갈 걸... 자바의 정석을 열심히 봤어야하는데 요즘 이런저런 일정이 많이 겹쳐서 계획한만큼 예습을 못한 것이 가장 아쉽다.
  • 이제 정식수업이 시작되는데 컨디션 관리, 일정 관리 잘하자. 패스트캠퍼스 인강도 봐야하니 매일의 공부기록을 포스팅하긴 어려울 것 같지만.. 주간으로라도 정리해서 항상 복습하고 복기하도록 하자🔥🔥🔥
profile
먹고 기도하고 코딩하라

0개의 댓글