2023/09/25🌙 배열 및 for문 활용

공부하는 개발자

about 오늘도 뚝딱🔨 뚝딱 하는 주니어 개발자👩🏻‍💻

북마크

고정글

최근 글

2023/09/25🌙 배열 및 for문 활용

date
read
반응형
 

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇

 

 

 

 

 

 

 

지난 수업 정리 

1 . 자료형 : 변수에 넣을 재료에 특성을 정하는 것
                 변수 선언 시 변수가 저장할 수 있는 값의 타입, 종류는 정수/실수/문자/문자열이 있다
                 정수는 Int 실수 float, double 문자 char 문자열 String 
                 Int 4byte , float 4byte , double 8byte , char 2byte
2. 조건문 : 특정 조건에 대해 참 거짓을 판별 후 해당 조건에 대한 실행문을 진행하는 것
                 조건에 따라 참과 거짓을 각각 처리한다. If 문 
3. 반복문 : 초기값과 종료시점을 정한 다음 반복 실행문을 반복하는 것 이며 
                 거짓이 될때까지 반복하는 것입니다. 
                종료 시점을 정확하게 진행 하지 않을 경우 무한 루프에 빠질 수 있으니 조심해야 합니다.
                반복 횟수에 따라 특정 코드를 반복해서 실행한다
                초기값, 조건, 증감식을 사용한다
                대표적인 반복문 for문  

 

 

 

 

 

메서드

함수와 메서드는 다르다 
다만  매개변수/기능/리턴값의 의미는 같다 
메서드는 참조를 하는 것이며 , 참조를 사용하는 건 하는 건.(콤마)을 사용하여 참조한다고 생각하면 된다
예시 : Ststem.out.println
           .  콤마가 2개 ,  2차 참조라고 보면 된다
예시 : Scanner in = new Scanner(system.in);
           in이라는 변수에 Scanner 자료형을 선언하여 초기값을 대입한다 
예시 : int nowNum = in.nextInt();
           in 변수를 참조하여 nextInt() 메서드를 호출하였다
메서드를 사용 시 고려사항 : 매개변수, 기능, 리턴값 을 고민해야한다

 

 

 

 

 

 

 

charAt()

반복문 안에 사용 할 경우 문자열의 i의 숫자만큼 지정 된 위치의 값을 리턴해준다.

리턴 값은 i자리의 문자이며, 리턴 타입은 char이다

문자열 인덱스는 0 부터 시작한다

charAt() 은 인덱스 문자로 리턴을 시켜준다.

반복문으로 모든 문자를 리턴, 리턴한 것을 출력한다

예제

for (int i = 0; i < test.length(); i++) {  
    char aaa=test.charAt(i);  
    if (aaa == 'a') {  
        cnt++;  
    }  
}

 

 

 

 

 

 

 

쉬어가기 문제

문제 : 악성 문자를 찾아라, 오늘의 악성 문자는 m 이다.

test : "abcdmabcm"

악성 문자는 모두 몇개인지 출력하며 위치도 같이 출력한다

 

package Study;  
  
public class Study01 {  
    public static void main(String[] args) {  
        String test = "abcdmabcm";  
        int cnt = 0;  
        for (int i = 0; i < 9; i++) {  
            char aaa = test.charAt(i);  
            if (aaa == 'm') {  
                cnt++;  
                System.out.println(" m 의 위치 : " + i);  
            }  
        }  
        System.out.println(" m 의 갯수 : " + cnt);  
    }  
}

 

package Study;
public class Study02 {
    public static void main(String[] args) {
        String test = "aaamvvccm";
        // 쌤의 풀이
        // 악성문자 몇개 어디에있는지, 악성문자의 이름은 ?
        // 악성문자 정의
        char badChar = 'm';
        // 카운팅 저장 변수
        int cnt = 0;
        // 바꿀 값 변수 선언
        String temptest = " ";
        for (int i = 0; i < 9; i++) {
            char nowChar = test.charAt(i);
            if(nowChar == badChar) {
                cnt++;                                                             // 카운팅 누적
                System.out.println("인덱스 [" + i + "] 위치에 악성문자가 있습니다.");      //  악성문자 위치
                temptest +=  "*";
            } else {
                temptest = temptest + nowChar;
            }
        }
        System.out.println("악성 문자는 : " + cnt + "개 있습니다.");
        test = temptest;
        System.out.println(test.replace('a', 'A'));
    }
}

 

 

 

 

 

 

 

 

배열

같은 자료형을 연속적으로 저장한다.

길이가 있고 인덱스는 0 부터 시작한다

고정길이는 선언할 때 길이의 값을 지정해주는 것 이다

예시 : int[] arr = new int[5] // int형 배열을 선언해주며 길이는 5로 고정시켜준다

Value : 배열에 저장된 값을 뜻하며 배열 변수 이름 [ 인덱스 번호 ] = 값; 으로 정의한다

필요한 만큼 배열크기를 선언해야 메모리 누수가 생기지 않는다

배열 활용시 입력부와 출력부를 나눠서 하면 좀 더 이해가 쉽다.

 

 

 

 

 

 

 

 

 

배열의 실습

package TASK;

public class task01 {
    public static void main(String[] args) {
        int[] number = { 10, 20, 5, 3, 25};
        for (int i = 0; i < number.length; i++) {
            System.out.print(number[i] + " ");
        }
    }
}

 

 

 

package TASK;

import sun.font.FontRunIterator;

import java.util.Scanner;

public class task02 {
    public static void main(String[] args) {
        int[] arr = new int[5];     // 5개의 Int를 받을 수 있는 공간 생성, [5]는 배열의 길이
                                       // 인덱스는 0 ~ 4까지 있다
        // 입력부 : 배열의 값을 저장하는 부
        for (int i = 0; i < 5; i++) {
            arr[i] = i;
        }

        // 출력부  : 배열의 값을 출력하는 부
        for (int i = 0; i < 5; i++) {
            System.out.println(arr[i]);
        }


    }
}

 

package TASK;

public class task03 {
    public static void main(String[] args) {
//        int[] arr = new int[]{};
        // 초기값은 자료형에 따라 정해진다.
        // Int 자료형은 초기값이 0이다.
        int[] arr = {1, 2, 3, 4, 5};


        // 출력부
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

 

package TASK;

public class task04 {
    public static void main(String[] args) {
        // int[] aaa = {10, 20, 5, 3, 25};
        // aaa.length 는 배열의 길이
        // 문제 : aaa의 배열의 모든 값의 합을 구하시오

        int[] aaa = {10,20,5,3,25};
        int tot = 0;
        for (int i = 0; i < aaa.length; i++) {
            tot += aaa[i];
        }
        System.out.println(tot);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

오늘의 문제

package Task2;

public class task1 {
    public static void main(String[] args) {
        // 문제 1 : 10길이 배열을 만들고 첫번쩨 인덱스부터 0~9까지 값을 채워라. 그리고 출력하라

        // 선언부
        int[] arr = new int[10];

        // 입력부
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            System.out.println("인덱스" + i + "번째 값 : " + arr[i]);
        }
    }
}

 

 

 

 

package Task2;

public class task2 {
    public static void main(String[] args) {
        //문제 2번 : int[] arr= {45,23,25,64,3,24,48};
        // 배열의 길이를 출력하시오
        // 배열에서 가장 큰 값의 위치와 값을 출력하세요

        // 선언부
        int[] arr= {45,23,25,64,3,24,48};
        int max = 0;     // 가장 큰 값 저장
        int point = 0;      // 큰 값의 위치 저장

        // 출력부
        System.out.println("arr의 배열 길이 : " + arr.length);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
                point = i;
            }
        }
        System.out.println("배열 중 가장 큰 값 : " + max);
        System.out.println("배열 중 가장 큰 값 위치 : " + point);
    }
}

 

 

 

 

package Task2;

import java.util.Scanner;

public class task3 {
    public static void main(String[] args) {
        // 문제 3 : 로또 번호를 저장 할 수 있는 배열을 선언하고 키보드로 6개 숫자를 입력 후 출력하라

        // 선언부
        int[] lottoN = new int[6];
        Scanner in = new Scanner(System.in);

        // 입력부
        for (int i = 0; i < lottoN.length ; i++) {
            System.out.print("로또 번호를 입력하세요 (6개) : ");
            lottoN[i] = in.nextInt();
        }

        // 출력부
        for (int i = 0; i < lottoN.length; i++) {
            System.out.println( (i+1) + "번째 입력 로또 번호  : " + lottoN[i]);
        }
    }
}

 

 

 

package Task2;

public class task4 {
    public static void main(String[] args) {
        // 문제 4 : 배열의 값을 모두 더한 총 합을 구하시오
        // 선언부
        int[] arr = {45, 23, 25, 64, 3, 24, 48};
        int tot = 0;

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            tot += arr[i];
        }
        System.out.println("배열의 총 합 : " + tot);
    }
}

 

 

package Task2;

public class task5 {
    public static void main(String[] args) {
        // 문제 5 : int[] arr = {45,23,25,64,3,24,48}
        //   배열에서 최대값과 최소값의 차이를 구하시오.

        // 선언부
        int[] arr = {45,23,25,64,3,24,48};
        int max = 0;
        int min = 0;

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            int tmp=0;
            if(arr[i] > max){
                max = arr[i];
            } else {
                tmp = min;
                max = tmp;
                min = arr[i];
            }
        }
        System.out.println("배열의 최대 값 : " + max);
        System.out.println("배열의 최소 값 : " + min);
        System.out.println("최대값과 최소값의 차이 : " + (max-min));
    }
}

 

 

 

 

package Task2;

public class task6 {
    public static void main(String[] args) {
        // 문제 6 : int[] arr = {45,23,25,64,3,24,48}
        //   값이 짝수인 인덱스 와 값을 모두 출력하시오.

        // 선언부
        int[] arr = {45,23,25,64,3,24,48};

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]%2==0) {
                System.out.println(" 짝수인 값 인덱스 번호 : " + i);
                System.out.println(" 값 : " + arr[i]);
            }
        }

    }
}

 

 

 

 

 

package Task2;

public class task7 {
    public static void main(String[] args) {
        // 문제 7 :  int[] arr = {1,2,3,0,0,0,1,2,3,4,5,2,2,2,2,0,0,0,0,0,3,3}
        //   0은 터널이다. 가장 긴 터널의 길이를 구하시오.

        // 선언부
        int[] arr = {1,2,3,0,0,0,1,2,3,4,5,2,2,2,2,0,0,0,0,0,3,3};
        int tmp = 0;
        int cnt = 0;

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 0) {
                cnt++;
                if ( cnt > tmp ) {
                    tmp = cnt;
                }
            } else {
                cnt = 0;
            }

        }
        System.out.println("가장 긴 터널의 길이 : " + tmp);
    }
}​

 

 

 

package Task2;

public class task8 {
    public static void main(String[] args) {
        // 문제 8 :  int[] arr = {1,2,3,0,0,0,1,2,2,4,2,2,2,2,2,0,0,0,0,0,3,3}
        //   숫자는 터널의 번호이다. 터널의 길이가 가장 긴 숫자와 길이를 출력하시오.

        // 선언부
        int[] arr = {1, 2, 3, 0, 0, 0, 0, 0, 1, 2, 2, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 3, 3};
        int maxNum = 0, maxCnt= 0, tagetNum = 0, tagetCnt = 0, maxCnt1 = 0, maxNum1 = 0;
        // tagetNum = 타겟된 숫자
        // tagetCnt = 타겟 숫자의 누적 개수
        // maxNum = 가장 높은 누적수의 숫자
        // maxCnt = 가장 높은 누적숫자의 실제 누적 개수

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == tagetNum ) {        // 현재 i의 값과 타겟번호를 비교함, 같을 경우
                tagetCnt++;                   // 타겟 누적을 증가시킴
                if (tagetCnt > maxCnt) {      // 타겟번호의 누적 개수와 큰 수의 누적 갯수 비교 / 타겟번호 누적개수가 더 크다면
                    maxCnt = tagetCnt;        // 타겟 누적 횟수를 를 큰 수 누적 횟수에 입력
                    maxNum = tagetNum;        // 타겟 번호를 큰 수 번호에 대입
                } else if (tagetCnt == maxCnt){
                    maxCnt1 = tagetCnt;
                    maxNum1 = tagetNum;
                }
            } else {                          // i의 값과 타겟번호가 다를 경우
                tagetNum = arr[i];            // 큰 수의 카운팅이 더 크다면 타겟넘버에 해당 인덱스i번째의 수를 대입시킴
                tagetCnt = 1;                 // 타겟넘버의 횟수 초기화
            }
        }
        System.out.println("가장 긴 숫자 : " + maxNum + " / " + maxNum1);
        System.out.println("가장 긴 숫자의 크기 : " + maxCnt + " / " + maxCnt1);
    }
}

 

 

package Task2;

public class task9 {
    public static void main(String[] args) {
        /*
         문제 9 :  int[] arr = {1,2,3,0,0,0,1,2,2,4,2,2,2,2,2,0,0,0,0,0,3,3}
                  숫자는 터널의 번호이다. 터널의 길이가 가장 긴 숫자와 길이를 출력하시오.
                  만약, 터널의 길이가 가장 긴 터널의 길이와 같은 것이 있다면 그 터널의 번호도 출력하시오.
        */
        // 선언부
        int[] arr = {1, 2, 3, 0, 0, 0, 1, 2, 2, 4, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3};
        int maxNum = 0, maxCnt= 0, tagetNum = 0, tagetCnt = 0, maxCnt1 = 0, maxNum1 = 0;
        // tagetNum = 타겟된 숫자
        // tagetCnt = 타겟 숫자의 누적 개수
        // maxNum = 가장 높은 누적수의 숫자
        // maxCnt = 가장 높은 누적숫자의 실제 누적 개수

        // 출력부
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == tagetNum ) {                // 현재 i의 값과 타겟번호를 비교함, 같을 경우
                tagetCnt++;                           // 타겟 누적을 증가시킴
                if (tagetCnt > maxCnt) {              // 타겟번호의 누적 개수와 큰 수의 누적 갯수 비교 / 타겟번호 누적개수가 더 크다면
                    maxCnt = tagetCnt;                // 타겟 누적 횟수를 를 큰 수 누적 횟수에 입력
                    maxNum = tagetNum;                // 타겟 번호를 큰 수 번호에 대입
                } else if (tagetCnt == maxCnt){
                    maxCnt1 = tagetCnt;
                    maxNum1 = tagetNum;
                }
            } else {                                 // i의 값과 타겟번호가 다를 경우
                tagetNum = arr[i];                   // 큰 수의 카운팅이 더 크다면 타겟넘버에 해당 인덱스i번째의 수를 대입시킴
                tagetCnt = 1;                        // 타겟넘버의 횟수 초기화
            }
        }
        System.out.println("가장 긴 숫자 : " + maxNum + " , " + maxNum1);
        System.out.println("가장 긴 숫자의 크기 : " + maxCnt + " , " + maxCnt1);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형