ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day 2 함수와 배열
    코딩 테스트 2024. 12. 20. 10:48

     

     

     

    1. 함수(메소드)

     

    1-1. 함수란?

    * 함수(메소드)는 특정 작업을 수행하는 코드 블록이다.

    - 입력: 필요한 값을 전달받아 작업 수행

    - 출력: 결과를 반환하거나 작업만 수행

    - 반복적인 작업을 하나의 함수로 정의하면 코드를 효율적으로 관리할 수 있음.

     

     

     

     

     

    1-2. 함수의 구조

    [접근제어자] [static 여부] 반환형 함수명(매개변수) {
        // 함수 내부의 작업
        return 반환값; // 반환형이 void인 경우 생략 가능
    }

     

     

    (예제)

    public static int addNumbers(int a, int b) {
        return a + b;
    }

     

     

    요소 설명
    접근제어자 public, private 등 접근 범위를 설정
    static 여부 클래스 메소드(static) 여부
    반환형 함수가 반환하는 값의 타입(int, void 등)
    함수명 함수 이름 (소문자로 시작)
    매개변수 함수가 입력받는 값

     

     

     

     

     

     

     

    1-3. 함수 호출과 실행

    - 함수는 호출해야 실행된다. 호출 방법은 함수명(매개변수) 이다. 

     

    (예제)

    public class Main {
        public static void main(String[] args) {
            int sum = addNumbers(5, 10);  // 함수 호출
            System.out.println("Sum: " + sum);
        }
    
        public static int addNumbers(int a, int b) {
            return a + b;
        }
    }

     

    (출력)

    Sum: 15

     

     

     

     

     

     

     

     

    1-4. 함수의 반환형과 매개변수

     

    (1) 반환형이 있는 함수

    public static int square(int num) {
        return num * num;
    }

     

     

    (2) 반환형이 없는 함수 (void) 

    public static void greet(String name) {
        System.out.println("Hello, " + name);
    }

     

     

    (3) 매개변수가 없는 함수

    public static void displayMessage() {
        System.out.println("Welcome to Java!");
    }

     

     

     

     

     

     

     

     

     

     

    2. 배열 (Array)

     

    2-1. 배열이란?

    - 배열은 동일한 데이터 타입의 값을 연속적으로 저장하는 자료구조이다. 

    - 인덱스를 사용해 각 값을 참조하며, 인덱스는 0부터 시작한다. 

    - 자바 배열은 고정 크기이다. 

     

     

     

     

     

     

    2-2. 배열 선언과 초기화

     

    (1) 배열 선언

    int[] arr = new int[5];  // 크기 5의 정수 배열 선언

     

     

    (2) 배열 초기화 

    int[] arr = {10, 20, 30, 40, 50};  // 선언과 동시에 값 초기화

     

    (3) 배열 요소 접근

    System.out.println(arr[0]);  // 첫 번째 요소 출력
    arr[1] = 25;                 // 두 번째 요소 변경

     

     

     

     

     

     

     

    2-3. 배열의 길이

     

    - 배열의 길이는 .length 속성을 사용해 확인할 수 있습니다.

    int[] arr = {10, 20, 30};
    System.out.println("배열의 길이: " + arr.length);  // 출력: 3

     

     

     

     

     

     

    2-4. 배열 순회

     

    (1) for 문 사용

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

     

    (2) 향상된 for 문 사용

    for (int num : arr) {
        System.out.println(num);
    }

     

     

     

     

     

     

     

     

    3. 함수와 배열의 조합

     

    3-1. 배열을 함수의 매개변수로 전달

    - 배열은 참조형 데이터 타입으로 함수에 전달된다. 

    public static void printArray(int[] arr) {
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
    
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        printArray(numbers);  // 출력: 1 2 3 4 5
    }

     

     

     

    3-2. 배열을 반환하는 함수

    - 함수가 배열을 반환할 수도 있다. 

    public static int[] createArray() {
        return new int[]{10, 20, 30};
    }
    
    public static void main(String[] args) {
        int[] arr = createArray();
        for (int num : arr) {
            System.out.print(num + " ");  // 출력: 10 20 30
        }
    }

     

     

     

     

     

     

     

     

     

    4. 실습 문제

    * 문제 1: 배열의 합 구하기

    - 설명: 사용자로부터 배열의 크기와 요소를 입력받아 배열의 합을 구하세요.

     

    (입력 예시)

    5
    1 2 3 4 5

     

    (출력 예시)

    배열의 합: 15

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            int sum = 0;
            for (int num : arr) {
                sum += num;
            }
    
            System.out.println("배열의 합: " + sum);
        }
    }

     

     

     

     

     

     

     

    * 문제 2: 최댓값과 최소값 찾기

    - 설명: 사용자로부터 배열을 입력받아 최대값과 최소값을 출력하세요.

     

    (입력 예시)

    4
    10 20 5 7

     

    (출력 예시)

    최대값: 20
    최소값: 5

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            int max = arr[0];
            int min = arr[0];
    
            for (int num : arr) {
                if (num > max) max = num;
                if (num < min) min = num;
            }
    
            System.out.println("최대값: " + max);
            System.out.println("최소값: " + min);
        }
    }

     

     

     

     

     

     

     

    * 문제 3: 배열 역순 출력

    - 설명: 배열을 입력 받아 역순으로 출력하세요.

     

    (입력 예시)

    5
    10 20 30 40 50

     

    (출력 예시)

    50 40 30 20 10

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            System.out.println("역순 출력:");
            for (int i = n - 1; i >= 0; i--) {
                System.out.print(arr[i] + " ");
            }
        }
    }

     

     

     

     

     

     

    * 문제 4: 배열 평균 구하기

    - 설명: 사용자로부터 정수 배열을 입력받아 평균을 계산하는 프로그램을 작성하세요.

    소수점 두 자리까지 출력하세요.

     

    (입력 예시)

    5
    10 20 30 40 50

     

    (출력 예시)

    평균: 30.00

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            double sum = 0;
            for (int num : arr) {
                sum += num;
            }
    
            double average = sum / n;
            System.out.printf("평균: %.2f\n", average);
        }
    }

     

     

     

     

     

     

     

    * 문제 5: 배열 내 특정 값 개수 세기

    - 설명: 사용자로부터 정수 배열과 특정 값을 입력받아 배열 내에서 해당 값이 몇 번 등장하는지 출력하세요.

     

    (입력 예시)

    5
    1 2 2 3 4
    2

     

    (출력 예시)

    2는 2번 등장합니다.

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            System.out.print("찾을 값 입력: ");
            int target = sc.nextInt();
    
            int count = 0;
            for (int num : arr) {
                if (num == target) {
                    count++;
                }
            }
    
            System.out.println(target + "는 " + count + "번 등장합니다.");
        }
    }

     

     

     

     

     

     

     

     

    * 문제 6: 배열 정렬 후 출력

    - 설명: 배열을 입력받아 오름차순으로 정렬한 후 출력하세요.

     

    (입력 예시)

    5
    4 1 3 5 2

     

    (출력 예시)

    1 2 3 4 5

     

     

    (코드)

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            Arrays.sort(arr);
    
            System.out.println("정렬된 배열:");
            for (int num : arr) {
                System.out.print(num + " ");
            }
        }
    }

     

     

    * Arrays.sort(arr);

    : 자바에서 제공하는 배열 정렬 기능.

    배열을 오름차순으로 정렬해주는 메소드.

     

     

     

     

     

     

    * 문제 7: 배열 중복 제거

    - 설명: 배열을 입력받아 중복된 값을 제거하고 출력하세요.

     

    (입력 예시)

    5
    1 2 2 3 4

     

    (출력 예시)

    1 2 3 4

     

     

    (코드)

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            Set<Integer> set = new HashSet<>();
            for (int num : arr) {
                set.add(num);
            }
    
            System.out.println("중복 제거 후 배열:");
            for (int num : set) {
                System.out.print(num + " ");
            }
        }
    }

     

     

    * Set<Integer> set = new HashSet<>();

    : Set 인터페이스와 이를 구현한 HashSet 클래스를 사용해 Integer 값(정수 타입)을 저장할 수 있는

    "중복 없는 집합(set)" 을 생성하는 선언

     

    - Set: 중복을 허용하지 않는 데이터 컬렉션. 데이터 순서와 관계없이 고유한 값만 저장할 수 있는 자료구조 정의.

    중복 자동 제거

    Set<Integer> set = new HashSet<>();
    set.add(1);
    set.add(2);
    set.add(2);  // 중복 값
    System.out.println(set);  // 출력: [1, 2]

    - HashSet: Set 인터페이스의 구현체로, 내부적으로 HashMap을 사용해 데이터 저장. 

    데이터 중복 자동 제거, 데이터 저장 순서 보장 안함. 

     

     

     

     

     

     

     

     

    * 문제 8: 두 배열의 합

    - 설명: 두 개의 배열을 입력받아, 같은 인덱스에 있는 값의 합을 새로운 배열로 출력하세요.

     

    (입력 예시)

    3
    1 2 3
    4 5 6

     

    (출력 예시)

    5 7 9

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
    
            int[] arr1 = new int[n];
            int[] arr2 = new int[n];
    
            System.out.println("첫 번째 배열 입력:");
            for (int i = 0; i < n; i++) {
                arr1[i] = sc.nextInt();
            }
    
            System.out.println("두 번째 배열 입력:");
            for (int i = 0; i < n; i++) {
                arr2[i] = sc.nextInt();
            }
    
            int[] result = new int[n];
            for (int i = 0; i < n; i++) {
                result[i] = arr1[i] + arr2[i];
            }
    
            System.out.println("두 배열의 합:");
            for (int num : result) {
                System.out.print(num + " ");
            }
        }
    }

     

     

     

     

     

     

     

     

     

    * 문제 9: 배열 회전

    - 설명: 배열을 오른쪽으로 한 칸 회전시키세요.

     

    (입력 예시)

    5
    1 2 3 4 5

     

    (출력 예시)

    5 1 2 3 4

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            int last = arr[n - 1];	// 1단계: 배열의 마지막 요소 저장, arr[4] = 5
            for (int i = n - 1; i > 0; i--) {	// 2단계: 배열 요소를 뒤로 한 칸씩 이동
                arr[i] = arr[i - 1];
            }
            arr[0] = last;	// 3단계: 마지막 요소를 첫 번째 위치로 이동, arr[0] = 5
    
            System.out.println("회전된 배열:");
            for (int num : arr) {
                System.out.print(num + " ");
            }
        }
    }

     

     

    i = 4: arr[4] = arr[3] → {1, 2, 3, 4, 4}
    i = 3: arr[3] = arr[2] → {1, 2, 3, 3, 4}
    i = 2: arr[2] = arr[1] → {1, 2, 2, 3, 4}
    i = 1: arr[1] = arr[0] → {1, 1, 2, 3, 4}

     

     

     

     

     

     

    * 문제 10: 배열의 짝수와 홀수 구분

    - 설명: 배열에서 짝수와 홀수를 구분하여 각각 출력하세요.

     

    (입력 예시)

    5
    1 2 3 4 5

     

    (출력 예시)

    짝수: 2 4
    홀수: 1 3 5

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            System.out.print("짝수: ");
            for (int num : arr) {
                if (num % 2 == 0) {
                    System.out.print(num + " ");
                }
            }
    
            System.out.print("\n홀수: ");
            for (int num : arr) {
                if (num % 2 != 0) {
                    System.out.print(num + " ");
                }
            }
        }
    }

     

     

     

     

     

     

     

     

     

    * 배열 11: 배열에서 가장 가까운 값 찾기

    - 설명: 사용자로부터 배열과 기준값을 입력받아 배열에서 기준값과 가장 가까운 값을 출력하세요.

     

    (입력 예시)

    5
    10 15 20 25 30
    18

     

    (출력 예시)

    20

     

     

    (코드)

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            System.out.print("배열 크기 입력: ");
            int n = sc.nextInt();
            int[] arr = new int[n];
    
            System.out.println("배열 입력:");
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
    
            System.out.print("기준값 입력: ");
            int target = sc.nextInt();
    
            int closest = arr[0];	// 1단계: 가장 가까운 값을 첫 번째 요소로 초기화
            int minDiff = Math.abs(target - arr[0]);	// 1단계: 최소 차이를 첫 번째 요소와의 차이로 초기화
    
            for (int num : arr) {	// 2단계: 배열의 모든 요소를 순회하며 차이를 비교
                int diff = Math.abs(target - num);	// 현재 요소와 target의 차이를 계산
                if (diff < minDiff) {	// 현재 차이가 최소 차이보다 작으면
                    minDiff = diff;	// 최소 차이를 갱신
                    closest = num;	// 가장 가까운 값을 갱신
                }
            }
    
            System.out.println("가장 가까운 값: " + closest);
        }
    }

     

    * Math.abs

    : 숫자의 "절댓값"을 반환한다. 

     

    '코딩 테스트' 카테고리의 다른 글

    Day 3 문자열 처리와 2차원 배열 강의  (0) 2024.12.22
    Day 1 자바 기본 문법 학습  (1) 2024.12.19
Designed by Tistory.