본문 바로가기

Java/예제로 공부하는 Java 100 문제풀이

[예제로 공부하는 Java 100 문제풀이 Part.2] 섹션1 - 배열

1. 배열, 용도, 선언, 사용

 

1) 배열의 용도와 배열을 선언하는 방법에 대해서 작성. 아래 코드에서 배열의 생성이 틀린 것은?

 

//[1]: 배열이란? --> 역할과 용도..필요성.
//자동차 판매 회사에서 영업사원의 판매 실적을 저장한다고 할 때 배열이 없으면 변수를 사용하여 저장할 것이다.
//영업사원이 10명 정도라면 모르겠지만, 100명이 넘는다면 변수를 일일이 선언하고 영업사원의 판매실적을 저장하는 것이 상당히 번거롭다.
//그러나 배열을 이용하면 일일이 변수를 선언할 필요없이 한방에 선언이 되고, 초기화 값도 한방에 셋팅해준다.
//즉, 배열은 동일한 데이터 타입의 값들을 하나의 배열명으로 저장시킬 수 있는 아주 편리한 자료구조이다.

//[2]: 배열의 선언
//데이터타입[] 배열명 = new 데이터타입[배열크기];
//데이터타입 배열명[] = new 데이터타입[배열크기];

//[3]: 배열의 선언 --> 배열 크기 지정 --> 배열 공간의 값은 자동으로 초기화 셋팅 됨(정수형:0, 실수형 0.0)

//[4]: 자동차 판매 회사의 영업사원 100명에 대한 영업실적을 저장하는 배열 선언 및 크기 지정 --> 2가지 방식
public class Java100_array_Basic001 {
    public static void main(String[] args) {
    
        //[4-1]: 첫번째 방식
        int[] sales_table = new int[100];
        //int sales_table[] = new int[100];
        
        //[4-2]: 두번째 방식
        double[] sales_table2 = new double[100];
        //double[] sales_table2;
        //sales_table2 = new double[100];
        
        //선언한 배열 사용하기
        System.out.println(sales_table[0]);    //0
        System.out.println(sales_table2[0]);   //0.0
    }
}

 

 

2. 배열, 인덱스, index, 초깃값

 

1) 배열과 인덱스의 관계에 대해서 설명하고 배열의 초깃값은 어떻게 셋팅되는지 말해보시오. 크기 10의 정수형 배열을 생성하고 인덱스로 배열 공간의 값을 출력해보시오.

 

//[!]: 배열과 인덱스
//크기 10의 정수형 배열을 선언하고 크기 10을 지정하면 메모리상에는 10개의 정수형 값을 담을 수 있는 공간이 생성된다.
//배열 변수는 참조형 타입으로써 해당 메모리 공간을 가리키게 된다. --> 즉, 해당 메모리 공간의 주소 값을 가진다. --> 이 주소 값을 통해서 참조한다.
//주소 값은 다른 표현으로는 참조 값이라고도 부른다.
//공간이 10개 만들어지면 동시에 자동적으로 해당 공간에 접근할 수 있는 인덱스 번호가 자동 부여된다. --> 인덱스 번호는 0부터 시작.
//따라서, 크기가 10인 배열 공간의 첫번째 인덱스는 0이고, 마지막 공간의 인덱스는 9가 된다. --> 즉, 마지막 인덱스는 "배열의크기-1"이 된다.
//인덱스 사용-->배열명[인덱스번호]

public class Java100_array_Basic002 {
    public static void main(String[] args) {
    
        //[1]: 배열의 선언 및 크기 지정 --> 학생 10명의 성적을 담는 배열
        int[] scores = new int[10];
        int s_size = scores.length;
        System.out.println(s_size);    //10
        
        //[2]: 선언한 배열을 인덱스로 접근하여 값 출력하기
        System.out.println(scores[0]);    //0
        System.out.println(scores[9]);    //0
        //System.out.println(scores[10]);    //Err
        System.out.println(scores[10-1]);    //0
        System.out.println(scores[s_size-1]);    //0
    }
}

 

 

3. 배열, 요소, 원소, 데이터

 

1) 배열 요소에 데이터 값을 넣으려면 어떻게 해야하는지 작성해보시오.

 

public class Java100_array_Basic003 {
    public static void main(String[] args) {
    
        //[1]: 배열 선언
        int[] sales_table = new int[5];
        
        //[2]: 선언한 배열 공간에 값 입력하기
        sales_table[0] = 3;
        sales_table[1] = 11;
        sales_table[2] = 22;
        sales_table[3] = 33;
        sales_table[4] = 44;
        
        //[3]: 값 출력하기
        System.out.println(sales_table[0]);    //3
        System.out.println(sales_table[1]);    //11
        System.out.println(sales_table[2]);    //22
        System.out.println(sales_table[3]);    //33
        System.out.println(sales_table[4]);    //44
        System.out.println(sales_table[sales_table.length - 1]);    //44
        
    }
}

 

 

4. 정수형 배열, 요소, 원소, 초기화

 

1) 크기 5의 정수형 배열을 선언하고 55, 88, 60, 100, 90으로 각 요소의 값을 초기화하시오.

 

public class Java100_array_Basic004 {
    public static void main(String[] args) {
    
        //[1]: 배열 선언과 동시에 특정 값으로 초기화
        int[] sales_table = {55, 88, 60, 100, 90};
        System.out.println(sales_table[1]); //88
        
        //[2]
        int[] sales_table2 = new int[] {55,88,60,100,90}; //1번 방식보다 불편
        System.out.println(sales_table2[2]); //60
        
        //[3]
        int[] sales_table3;
        //sales_table3 = {55,88,60,100,90}; //Err
        sales_table3 = new int[] {55,88,60,100,90};
        System.out.println(sales_table3[3]); //100
        
    }
}

 

 

2) 배열 요소의 값을 반복문을 사용하여 모두 출력하시오.

 

public class Java100_array_Basic005 {
    public static void main(String[] args) {
        
        //[1]: 배열 선언과 동시에 특정 값으로 초기화
        int[] sales_table = {33, 52 93, 100, 87};
        
        //[2]: 반복문을 사용하여 모든 값 출력
        for(int i=0; i<sales_table.length; i++){
            System.out.print(sales_table[i] + "");
        }
        System.out.println();
    }
}

 

 

5. 정수형, 실수형, 배열, 주소값

 

1) 크기 5의 정수형과 실수형 배열을 생성하고 각각의 주소값(=참조값)을 출력해보시오.

 

public class Java100_array_Basic006 {
    public static void main(String[] args) {
    
        //[1]: 정수형과 실수형 배열 변수 선언
        int[] ar = {3, 3, 3, 3, 4};
        double[] ar2 = {9, 8, 2.45, 5.98, 5.11, 3.14};
        
        //[2]: 마지막 배열 요소 값 출력
        System.out.println(ar[ar.length-1]);    //4
        System.out.println(ar2[ar2.length-1]);  //3.14
        
        //[3]: 배열명 자체를 찍어서 출력 --> 주소(참조)값 --> I:정수형 배열, D:실수형 배열을 각각 의미함.
        System.out.println(ar); //정수형 배열 --> I   //[I@6d06d69c
        System.out.println(ar2); //실수형 배열 --> D  //[D@7852e922
    }
}

 

 

6. 배열, 값, for문, 반복문

 

1) 배열의 값들을 for문과 같은 반복문을 사용하지 않고 한꺼번에 출력하는 코드를 작성하시오.

 

//[!]: Arrays.toString() 메서드
//반복문을 사용하지 않고 배열의 값을 출력하고자 한다면 Arrays클래스의 toString()메서드를 사용하면 된다.
//toString() 인자로는 배열명을 넣어주면 된다.
//사용을 위해서는 기본적으로 java.util.Arrays 임포트 선언이 되어져 있어야 한다. --> 이 때도 세미콜론 까먹지 않도록 주의!

import java.util.Arrays;

public class Java100_array_Basic07 {
    public static void main(String[] args) {
    
        //[1]: 배열 선언
        int[] ar = {238,483,239,442,487,239,873};
    
        //[2]: toString()메서드 사용하여 값 출력
        System.out.println(Arrays.toString(ar)); //[]괄호의 형태로 배열 표시를 보여주면서 출력 됨.
        //[238,483,239,442,487,239,873]
        System.out.println(ar[0]); //238
        
        //[3]: for 반복문
        for (int i=0; i<ar.length; i++) {
            System.out.print(ar[i] + "");
        }
        System.out.println();
        //238 483 239 442 487 239 873
    }
}

 

 

7. 다중, 배열, 다중 배열, 선언

 

1) 다음 중 다중 배열의 선언으로 맞는 것을 골라보시오.

 

public class Java100_array_Basic08 {
    public static void main(String[] args) {
    
        //[1]
        int[] a,b,c;  //가능
        
        //[2]
        intd[],e[],f[]; //가능
        
        //[3]
        int g[],h,i; //h,i는 정수로 선언됨.
    }
}

 

 

8. 배열, 복사, 메서드

 

1) 배열을 복사하는 메서드를 말해보고 관련된 예제 코드를 구현해보시오.

 

//[!]: 배열 복사하기
//arraycopy()메서드 사용 --> 사용법 --> System.arraycopy(원본배열명,???,복사배열명,???,길이);

import java.util.Arrays;

public class Java100_array_Basic009 {
    public static void main(String[] args) {
    
        //[1]: ar,ar2 배열 선언
        int[] ar = {1,2,3,4,5};
        int[] ar2 = {1,2,3,4,5,6,7,8,9,10};
        
        //[2]: 배열 복사하기 --> System.arraycopy()
        System.arraycopy(ar,2,ar2,4,3);  
        System.out.println(Arrays.toString(ar)); //[1,2,3,4,5]
        System.out.println(Arrays.toString(ar2));  //[1,2,3,4,3,4,5,8,9,10]
    }
}

 

 

9. 1차원, 1차원 배열, 생성

 

1) 1, 2차원 배열의 생성 및 출력을 다양한 예제로 구현해보시오. (1차원)

 

public class Java100_array_OneTwoArray {
    public static void main(String[] args) {
    
        //[1]: String 1차원 배열 --> 3개의 문자열을 담을 수 있는 배열 생성하기
        //String 타입의 참조 변수 3개를 저장하기 위한 공간 생성 --> 이때, 참조형 변수 각 요소는 기본값 --> null로 초기화.
        String[] province = new String[3];
        System.out.println(province[0]); //null
        System.out.println(province[1]); //null
        System.out.println(province[2]); //null
        
        //[2]: String 배열 초기화 --> 직접 입력
        province[0] = "강원도";
        province[1] = "전라도";
        province[2] = "경상도";
        
        //[3]: String 배열 초기화 --> 배열 선언 및 생성시 {}로 동시에 초기화
        String[] nation = new String[]{"한국","미국","중국"};
        System.out.println(nation[1]); //미국
        
        String[] flower = {"무궁화","개나리","해바라기"};
        System.out.println(flower[1]); //개나리
        
        //[4]: 반복문을 사용하여 배열 값 모두 출력
        for(int i=0; i<flower.length; i++) {
            System.out.print(flower[i] + "");
        }
        //무궁화 개나리 해바라기
        
        //[5]: 향상된 for문으로 배열 요소 출력
        for(String aaa:flower) {
            System.out.print(aaa + "");
        }
        //무궁화 개나리 해바라기
        
    }
}

 

 

10. 2차원, 2차원 배열, 생성, 출력

 

1) 1, 2차원 배열의 생성 및 출력을 다양한 예제로 구현해보시오. (2차원)

 

public class Java100_array_OneTwoArray2 {
    public static void main(String[] args) {
    
        //[6]: String 2차원 배열 만들기 --> 2x3 Shape
        //아시아-->동북아시아(한국,중국,일본),동남아시아(태국,베트남,필리핀)
        String[][] asia_nations = {
            {"한국","중국","일본"}, 
            {"태국","베트남","필리핀"}
        };
        
        System.out.println(asia_nations[0]); //동북아시아 주소를 참조하는 값 출력
        System.out.println(asia_nations[1]); //동남아시아 주소를 참조하는 값 출력
        
        System.out.println(asia_nations[0][1]); //중국
        System.out.println(asia_nations[1][0]); //태국
        
        System.out.println(asia_nations.length); //2 --> (행의 개수)
        System.out.println(asia_nations[0].length); //3 --> (열의 개수)
    }
}

 

 

11. 배열, 1차원, 2차원, 예제(1)

 

1) 1, 2차원 배열의 생성 및 출력을 다양한 예제로 구현해보시오. (메서드)

 

public class Java100_array_OneTwoArray3 {
    public static void main(String[] args) {
    
        String[][] asia_nations = {
            {"한국","중국","일본"}, 
            {"태국","베트남","필리핀"}
        };
        
        //[7]: 반복문을 사용한 String 2차원 배열 값 출력
        for(int i=0; i<asia_nations.length; i++) {
            for(int j=0; j<asia_nations[i]; j++) {
                System.out.print(asia_natons[i][j] + "");
            }
            System.out.println();
        }
        //한국 중국 일본
          태국 베트남 필리핀
          
        //[8]: charAt()메서드 사용-->해당 인덱스에 있는 값을 반환-->단어를 char배열에 한 글자씩 저장할 수 있음.
        String[] strAr = {"hong","kim","park"};
        System.out.println(strAr[0]); //hong
        System.out.println(strAr[0].charAt(2)); //n
        System.out.println(strAr[1].charAt(2)); //m
        System.out.println(strAr[2].charAt(2)); //r
        
    }
}

 

 

12. 배열, 1차원, 2차원, 예제(2)

 

1) 1, 2차원 배열의 생성 및 출력을 다양한 예제로 구현해보시오. (메서드)

 

public class Java100_array_OneTwoArray4 {
    public static void main(String[] args) {
    
        String[] strA = {"hong","kim","park"};
        
        //[9]: 반복문에서 charAt()메서드 사용
        //[9-1] 잘못된 예1
        for(int i=0; i<strAr.length; i++) {
            System.out.print(strAr[i].charAt(i));   //hir
        }
        
        //[9-2] 잘못된 예2
        for(int i=0; i<strAr.length; i++) {
            for(int j=0; j<strAr.length; j++) {
                System.out.print(strAr[i].charAt(j));
            }
        }
        //honkimpar
        
        //[9-3] 맞는 예
        System.out.println(strAr.length); //3
        //System.out.println(strAr[0].length); //Err --> 1차원 배열이기 때문
        System.out.println(strAr[0].length()); //4
        
        for(int i=0; i<strAr.length; i++) {
            for(int j=0; j<strAr[i].length(); j++) {
                System.out.print(strAr[i].charAt(j));
            }
            System.out.println();
        }
        //hong
        //kim
        //park
        
        String[][] strAr = {{"hong","kim"},{"park","lee"}};        
        System.out.println(strAr[0].length); //2
        
        //[10]: length vs length()
        int[] aaa = new int[10];
        System.out.println(aaa.length); //10 --> 배열의 길이
        
        String bbb = "Welcome to Seoul";
        System.out.println(bbb.length()); //16 --> 문자열의 길이(공백 문자 포함)
        
    }
}

 

 

13. 사용자, 입력, 사용자 입력

 

1) 사용자 입력을 받아 2차원 배열을 생성하고 값을 입력하는 코드를 구현하시오. 이때 중첩 반복문을 사용하여 출력도 같이 해보시오.

 

import java.util.Scanner;

public class Java100_array_TwoArrayUserInput {
    public static void main(String[] args) {
    
        //[1]: 사용자 입력을 위한 객체 선언
        Scanner sc = new Scanner(System.in);
        
        //[2]: 2차원 배열의 행과 열 선언-->사용자 입력으로 처리
        System.out.print("행의 갯수를 입력하고 [Enter] 치세요=");
        int R = sc.nextInt();
        System.out.print("열의 갯수를 입력하고 [Enter] 치세요=");
        int C = sc.nextInt();
        
        //[3]: char 2차원 배열 선언 --> 사용자로부터 R,C 입력받아-->gameMap[R][C]생성.
        char[][] gameMap = new char[R][C];
        
        //[4]: 사용자 입력을 받아서 저장할 String 배열 선언-->이때 크기를 [R]로 해주도록 한다.(★)
        //크기를 R만큼만 해주면 되는 이유? --> 어차피 사용자가 입력하는 값은 안쪽 for문을 돌면서 2차원 배열에 입력하기 때문이다.
        String[] strAr = new String[R];
        
        //[5]: 2차원 배열 요소-->사용자가 입력하는 값으로 셋팅
        for(int i=0; i<R; i++) {
            System.out.print("1번째 행에 입력할 문자 5개를 차례대로 입력하고 [Enter] 치세요=");
            strAr = sc.next();
            for(int j=0; j<C; j++) {
                gameMap[i][j] = strAr[i].charAt(j);
            }
        }
    
    }
}

 

 

14. 사용자 입력, 배열, 2차원

 

1) 사용자 입력을 받아 2차원 배열을 생성하고 값을 입력하는 코드를 구현하시오. 이때 중첩 반복문을 사용하여 출력도 같이 해보시오.

 

import java.util.Scanner;

public class Java100_array_TwoArrayUserInput2 {
    public static void main(String[] args) {
    
        //[1]: 사용자 입력을 위한 객체 선언
        Scanner sc = new Scanner(System.in);
        
        //[2]: 2차원 배열의 행과 열 선언-->사용자 입력으로 처리
        System.out.print("행의 갯수를 입력하고 [Enter] 치세요=");
        int R = sc.nextInt();
        System.out.print("열의 갯수를 입력하고 [Enter] 치세요=");
        int C = sc.nextInt();
        
        //[3]: char 2차원 배열 선언 --> 사용자로부터 R,C 입력받아-->gameMap[R][C]생성.
        char[][] gameMap = new char[R][C];
        
        //[4]: 사용자 입력을 받아서 저장할 String 배열 선언-->이때 크기를 [R]로 해주도록 한다.(★)
        //크기를 R만큼만 해주면 되는 이유? --> 어차피 사용자가 입력하는 값은 안쪽 for문을 돌면서 2차원 배열에 입력하기 때문이다.
        String[] strAr = new String[R];
        
        //[5]: 2차원 배열 요소-->사용자가 입력하는 값으로 셋팅
        for(int i=0; i<R; i++) {
            System.out.print((i+1) + "번째 행에 입력할 문자 " + C + "개를 차례대로 입력하고 [Enter] 치세요=");
            strAr[i] = sc.next();
            for(int j=0; j<C; j++) {
                gameMap[i][j] = strAr[i].charAt(j); //j인덱스에 있는 값을 하나씩 가져와서-->gameMap 좌표에 셋팅.
            }
        }
        
        //[6]: 2차원 배열에 들어있는 값 출력하기
        System.out.println(strAr); //주소값 출력
        System.out.println(strAr[0]); //KOR
        System.out.println(strAr[1]); //USA
        
        System.out.println("=============================");
        for(int i=0; i<R; i++) {
            for(int j=0; j<C; j++) {
                System.out.print(gameMap[i][j]);
            }
            System.out.println();
        }
        System.out.println("=============================");
        //KOR
        //USA

    }
}