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 |