코딩 테스트

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 자바 기본 문법 학습  (0) 2024.12.19