My Melody Is Cute 연습문제(배열)
본문 바로가기

실습👁️‍🗨️/문제

연습문제(배열)

public class PersonTest {
    public static void main(String[] args) {
        Person kimcoding = new Person("김코딩", "프로그래머", 30);
        Person nahacker = new Person("나해커", "해커", 32, true);

        int age = kimcoding.getAge();
        System.out.println("김코딩의 나이는 " + age + "살 입니다.");
    }
}

class Person {
    private String name;
    private String occupation;
    private int age;
    private boolean isSingle;

    Person(){
        System.out.println("첫 번째 생성자");
    };

    Person(String name, String occupation, int age) {
        this(name, occupation, age, false);
        System.out.println("두 번째 생성자");
    }

    Person(String name, String occupation, int age, boolean isSingle) {
        System.out.println("세 번째 생성자");
        this.name = name;
        this.occupation = occupation;
        this.age = age;
        this.isSingle = isSingle;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

//출력 세번째생성자 두번째생성자 세번째 생성자 김코딩의 나이는 30입니다.

 

틀린것을 고르시오

PersonTestmain 메서드를 실행하면 가장 먼저 “두 번째 생성자"라는 문구가 출력된다. X(세번째생성자가 먼저 출력)

김코딩은 싱글이다. 싱글이 아님 false X

 

PersonTestmain 메서드를 실행하면 “세 번째 생성자"라는 문구가 두 번 출력된다. O

 

public class CozStudentsTest {
    public static void main(String[] args) {
        CozStudents cozStudents = new CozStudents();
        cozStudents.averageAge = 29;
        System.out.println("코드스테이츠 이번 기수 수강생들의 평균 나이는 " + cozStudents.averageAge + "살입니다.");

        nextGeneration(cozStudents.averageAge);
        System.out.println("최종적인 다음 기수 수강생들의 평균 나이는 " + cozStudents.averageAge + "살입니다.");

    }

    static void nextGeneration(int averageAge) {
        averageAge = 30;
        System.out.println("다음 기수 수강생들의 평균 나이는 " + averageAge + " 살입니다.");
    }
}

class CozStudents {
    int averageAge;
}

출력값 29 30 29

 

package com.codestates.coplit; 
import java.util.Arrays;

public class Solution { 
	public int[] getEvenNumbers(int[] arr) {
    // TODO: 짝수만 요소로 갖는 배열 리턴
    //빈배열 만들기 - 배열요소 반복
    //짝수구하기 - 빈배열에 해당조건요소넣기- 반환
    int[] result = new int[0];

    for (int i = 0; i < arr.length; i++){
      if(arr[i]%2==0){ //짝수일때
       result = Arrays.copyOf(result, result.length+1);
       result[result.length -1] = arr[i];
      }
    }
    return result;
  }
}

배열문제 코플릿

getEvenNumbers

더보기

Arrays.copyOf: 배열을 복사하고 크기를 조절합니다.

Arrays.sort: 배열을 정렬합니다.

Arrays.binarySearch: 정렬된 배열에서 이진 검색을 수행합니다.

Arrays.fill: 배열의 모든 요소를 특정 값으로 채웁니다.

Arrays.equals: 두 배열이 동일한 내용을 가지고 있는지 비교합니다.

Arrays.toString: 배열을 문자열로 변환하여 출력합니다.

Arrays.asList: 배열을 List로 변환합니다.

 

 

더보기
  1. Arrays.copyOf:
    • Arrays.copyOf 메서드는 Java에서 배열을 복사하고 동시에 새로운 배열을 생성하는 메서드입니다.
    • 이 메서드를 사용하면 배열의 일부 또는 전체 내용을 복사하여 새로운 배열을 만들 수 있습니다.
    • Arrays.copyOf를 사용하면 복사할 배열과 목표 길이(복사 후 배열의 길이)를 지정할 수 있으며, 자동으로 새로운 배열을 생성하고 복사된 데이터를 채웁니다.
  2. System.arraycopy:
    • System.arraycopy는 배열 간의 데이터를 복사하는 데 사용되는 Java의 기본 메서드 중 하나입니다.
    • 이 메서드는 배열의 데이터를 다른 배열로 복사할 때 사용됩니다. 이때 복사 시작 위치, 복사할 요소 수, 원본 배열, 대상 배열 등을 지정해야 합니다.
    • System.arraycopy는 기존 배열을 복사할 대상 배열에 직접 복사하므로 새로운 배열을 자동으로 생성하지 않습니다.

 

Arrays.copyOf배열을 복사하여 새로운 배열을 생성하고 반환하는 반면,

System.arraycopy이미 존재하는 배열을 다른 배열로 직접 복사하는 데 사용

 

 

public class Solution { 
	public int[] addToBack(int[] arr, int el) {
    // TODO:  배열맨뒤에 추가후 리턴
		int[] newArr = new int[arr.length +1];
		//기존 배열을 +1 확장한 새로운 정수 배열 생성

		System.arraycopy(arr,0,newArr,0,arr.length);
		//arr배열의 0부터 길이까지 newArr배열에 처음부터 복사 

		newArr[arr.length] = el; //배열의 맨 뒤에 요소 추가

		return newArr;		
	} 
}

 

14번

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
	public int[] getElementsUpTo(int[] arr, int n) {
    // TODO: 주어진 인덱스 이전의 요소를 가진 새로운 배열
		int[] newArr = new int[n];

		if( n >= arr.length || n == 0 ) {
			newArr = new int[0];
		} else {
			newArr = Arrays.copyOfRange(arr, 0, n );//from포함 to제외
	} 
		return newArr;
 }
}

 

15번

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
	public int[] getAllElementsButFirst(int[] arr) {
    // TODO: 배열의 첫번째 요소를 제외한 배열 리턴
    if( arr.length == 0){
      return  new int[]{};      
    }
    int[] newArr = Arrays.copyOfRange(arr,1,arr.length);//정수형배열 복사
    return newArr;
	} 
}

자꾸 빈배열 반환이 안돼서 오류파티였다...

원인은 길이가 정해진 새로운 배열을 생성해버려서 그런거였고

copyOfRange가 새배열을 복사생성해준다

배열타입 쓰는거 까먹지 말기 

 

17번

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
	public int[] getAllElementsButNth(int[] arr, int n) {
    // TODO: 해당 인덱스를 제외한 배열 리턴
    // 담을 배열,인덱스 확인변수
    if( arr.length <= n) {
      return arr;
    }
    int[] newArr = new int[arr.length-1];
    int j = 0;

    for(int i=0; i < arr.length; i++){
        if( i !=n){
        newArr[j] =arr[i]; //반복요소 i를 새배열 j에 저장
        j++;
      }
     }
      return newArr;
	} 
}

복잡하다,,, 머리 터질뻔했다 다행히 아직은 안터졌다.

래퍼런스 코드 있는줄 몰랐는데,,,지금 알았따....ㅋ...ㅋㅋ

더보기

래퍼런스는 i == n 조건에 cotinue를 썼다

for (int i = 0; i < arr.length; i++) {
      if (i == n) {
        continue;
      }
      result[index] = arr[i];
      index++;
    }

 

18번

아 정규식 진짜 짜증난닼ㅋ큐ㅜㅜㅜㅠ🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕🤕

 

copyOfRange로 하려다가 일이 너무 커져서 포기했다ㅠ

왜 이러세요...

public class Solution { 
	public String createPhoneNumber(int[] arr) {
    // TODO: 정수요소 배열을 입력받아 전화번호 형식의 문자열 리턴
    String phnumber = Arrays.toString(arr).replaceAll("[^0-9]","");

        if(arr.length == 8) {
            phnumber = "(010)" + phnumber.replaceAll("(\\d{4})(\\d{4})","$1-$2");
        } else {
        phnumber = phnumber.replaceAll("(\\d{3})(\\d{4})(\\d{4})","($1)$2-$3");
          }
        return phnumber; 
  }
}

 

String replace(CharSequnce target, CharSequence replacement)

문자열만 변환가능

String replaceAll(String regex, String replacement)

정규식을 이용해서 변환가능

 

19번

public class Solution { 
	public int[] fibonacci(int num) {
    // TODO:
    int[] newArr = new int[num +1];

    for(int i = 0; i <= num; i++ ){
      if(i<=1){
        newArr[i] = i; //0번째 1번째 값은 0,1
      } else {
        newArr[i] = newArr[i-1] + newArr[i-2];
      }      
    } return newArr;
	} 
}

피보나치 어쩌구............ 문제는 18번이 더 번거로ㅓ웠다ㅠㅠ

근데 자꾸 괄호 안닫아서 오류나는게 어이없엉..

'실습👁️‍🗨️ > 문제' 카테고리의 다른 글

스트림 연습문제  (0) 2023.11.03
컬렉션 연습문제  (0) 2023.11.01
연습문제  (0) 2023.10.12
연습문제  (0) 2023.10.11