`System.arraycopy()` 메서드는 배열에서 다른 배열로 요소를 복사하는 데 사용됩니다. 이 메서드는 다음과 같은 형식을 가집니다:

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)



- `src`: 복사할 원본 배열입니다.
- `srcPos`: 원본 배열에서 복사를 시작할 인덱스입니다.
- `dest`: 복사된 요소를 저장할 대상 배열입니다.
- `destPos`: 대상 배열에서 복사를 시작할 인덱스입니다.
- `length`: 복사할 요소의 수입니다.

따라서 `System.arraycopy(num_list, 0, result, 0, num_list.length);`는 `num_list` 배열의 모든 요소를 `result` 배열로 복사하는 것입니다. 이 코드는 `num_list` 배열의 모든 요소를 `result` 배열의 첫 번째 요소부터 시작하여 복사합니다. 따라서 `result` 배열의 처음 `num_list.length` 개의 요소가 `num_list` 배열의 요소와 동일한 값을 가지게 됩니다.

'JAVA' 카테고리의 다른 글

배열에서 홀수 짝수 숫자를 판별해서 이어붙이기  (0) 2024.03.21
메서드 정의  (0) 2024.03.06

1. StringBuilder를 사용

public int solution(int[] num_list) {
       StringBuilder even = new StringBuilder();
       StringBuilder odd = new StringBuilder();
        
        for(int i = 0; i < num_list.length; i++) {
            if(num_list[i] % 2 == 0) {
                even.append(num_list[i]);
            } else {
                odd.append(num_list[i]);
            }
        }
        
        int evenSum = Integer.parseInt(even.toString());
        int oddSum = Integer.parseInt(odd.toString());
        
        return evenSum + oddSum;
    }

 

숫자를 더하는게 아니라 이어붙여야하므로 문자열과 문자열을 이어붙이는 방식으로 처리할 수 있다.

만약 위의 코드처럼 숫자를 더하려면 문자열을 정수로 형변환을 해야 가능.

 

2. 숫자 10을 곱해서 숫자를 이어 붙일 수 있음.

public int solution(int[] num_list) {
        int answer = 0;

        int even = 0;
        int odd = 0;

        for(int num : num_list) {
            if(num % 2 == 0) {
                even *= 10;
                even += num;
            } else {
                odd *= 10;
                odd += num;
            }
        }
        answer = even + odd;

        return answer;
    }

 

프로그래머스에서 다른 사람이 푼 걸 보고 가져왔는데, 위의 코드와 같이 10을 곱한 후 num을 더하면 숫자를 이어붙일 때와 같은 결과값이 나오게됨. 보고 이런 방법이 있었구나 감탄함ㄷㄷㄷㄷ

'JAVA' 카테고리의 다른 글

System.arraycopy()  (0) 2024.03.21
메서드 정의  (0) 2024.03.06
public static int add(int a, int b) {
	// 메서드 본문, 실행 코드
}

제어자 반환타입 메서드이름(매개변수 목록){
	메서드 본문
}

 

메서드는 이름을 통해서 호출.

매개변수가 값을 반환하지 않는 경우에는 void를 사용.

선언 : ex) public static void printHeader() 

호출 : printHeader(); 

반환타입이 없으므로 메서드만 호출하고 반환 값을 받지 않음.

 

매개변수가 없는 경우에는 매개변수를 비워두고 정의하면 된다.

선언 ex) public static void printHeader()

호출 ex) printerHeader()

 

모든 메서드는 항상 return을 호출해야함.

반환 타입 void의 경우에는 예외로 printFotter()와 같이 생략해도 됨

자바는 반환 타입이 없는 경우에는 return을 마지막줄에 넣어주고  return을 만나면 해당 메서드는 종료

 

반환타입이 있는 경우에는 반드시 값을 반환해야하고 반환은 return을 사용해서 값을 반환한다.

 

 

** 메서드는 반환 값이 있을 때, 반환이 없을 때(void) 이러한 경우를 잘 생각해서 이해해보자.

메서드 반환 값을 받았지만 사용하지 않는 것도 가능하다

예를 들면

int sum = add(1,2) 이런식으로 사용하는 경우에는 메서드 add를 호출해서 값을 받아서 sum에 저장하게 됨.

만일 메서드만 호출하고 반환 값을 사용하지 않는 경우라면, 

add(1,2)와 같이 호출만 하고 호출 결과를 변수에 담지 않으면 된다.

 

자바의 중요한 대원칙!

 

** 자바는 항상 변수의 값을 복사해서 대입한다 **

 

 

자바는 메서드 이름 뿐만 아니라 매개변수 정보를 함께 사용해서 메서드를 구분한다.

때문에 이름이 같고, 매개변수가 다른 메서드를 정의할 수 있는데 이를 메서드 오버로딩(Overloading)이라 한다.

 

오버로딩

add(int a, int b)

add(int a, int b, int c)

add(double a, double b)

 

오버로딩 규칙

메서드 이름이 같아도 매개변수의 타입 및 순서가 다르면 가능하다. (반환 타입은 인정하지 않음)

 

메서드 시그니처(method signature)

메서드 시그니처 = 메서드 이름 + 매개변수 타입(순서)

자바에서 메서드를 구분할 수 있는 고유한 식별자나 서명을 뜻함. ㅡ> 메서드를 구분할 수 있는 기준

 

오버로딩 실패

int add(int a, int b)

double add(int a, int b)

 

메서드 이름이 같이도 메서드 시그니처가 다르면 다른 메서드로 간주함

반환 타입은 시그니처에 포함되지 않기 때문에 위의 오버로딩을 실패한 것. ㅡ> 반환 타입을 제외하면 add(int a, int b)

 

 

 

'JAVA' 카테고리의 다른 글

System.arraycopy()  (0) 2024.03.21
배열에서 홀수 짝수 숫자를 판별해서 이어붙이기  (0) 2024.03.21

+ Recent posts