[Java] Section2. Array 1,2차원 배열

Nam_JU·2022년 8월 11일
0

Algorithm

목록 보기
3/20
post-thumbnail

1. 큰 수 출력하기

public class Main01 {
    public static ArrayList <Integer> solution(int n, int[]arr){
        ArrayList<Integer> answer = new ArrayList<>();
            answer.add(arr[0]); //0번은 무조건 출력
            for (int i=1; i<n; i++){
                if (arr[i] > arr[i-1]){ //앞의 수가 더 크면 
                    answer.add(arr[i]);
                }
            }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int []arr = new int[n];
        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        for (int x : solution(n, arr)){
            System.out.println(x + " ");
        }
    }
}

2. 보이는 학생

public class Main02 {
    //이중 for 문은 시간 초과
    public static int solution(int n, int []arr){
        int answer = 1; //첫번째 사람은 무조건 보인다
        int max = arr[0]; 

        for (int i=1; i<n; i++){
            if (arr[i]> max){  //키가 같아도 안보임
                answer ++;
                max = arr[i];
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int []arr = new int[n];

        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        System.out.println(solution(n, arr));
    }
}

3. 가위 바위 보

public class Main03 {
    public static String solution(int n, int []arr1, int[]arr2){
        String answer = "";
        for (int i=0; i<n; i++){
            if (arr1[i]==arr2[i]){ //1. A가 비기는 경우
                answer += "D";
            }else if(arr1[i] ==1 && arr2[i]==3){ //2. A가 가위로 이기는 경우
                answer += "A";
            }else if(arr1[i] ==2 && arr2[i]==1){ //3. A가 바위로 이기는 경우
                answer += "A";
            }else if(arr1[i] ==3 && arr2[i]==2) { //4. A가 보로 이기는 경우
                answer += "A";
            }else answer += "B"; //5. 그외의 나머지는 전부 B

        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int arr1[] = new int[n];
        int arr2[] = new int[n];

        for (int i=0; i<n; i++){
            arr1[i] = sc.nextInt();
        }
        for (int i=0; i<n; i++){
            arr2[i] = sc.nextInt();
        }
        for (char x : solution(n , arr1, arr2).toCharArray())
        System.out.println(x);
    }
}

4. 피보나치 수열

public class Main04 {
    public static int[] solution(int n){
        int[] answer = new int[n];
        answer[0]=1;
        answer[1]=1;

        for (int i=2; i<n; i++){
            answer[i]= answer[i-2] + answer[i-1];
        }return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int x : solution(n)){
            System.out.println(x + " ");
        }
    }
}

5. 소수 (에라토스테네스 체)

public class Main05 {
    public static int solution(int n){
        int answer =0;
        int[] ch = new int[n+1]; //체크배열 {인덱스 번호가 n번까지 생기기 위하여}
            // 0,1은 제외
        for (int i=2; i<=n ; i++){
            if (ch[i]==0){ //소수
                answer++;
                for (int j=i; j<=n; j=j+i){ // i배수들을 체크
                    ch[j]=1;
                }
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(solution(n));
    }
}
  • 소수가 되는 수의 배수를 지우면 남은건 소수가 된다
  • 2부터 자기자신을 제외한 배수가 되는것을 지우기

6. 뒤집은 소수

public class Main06 {
    public static boolean isPrime(int num){
        if (num == 1)
            return false; //1은 소수가 아니다
        for (int i=2; i<num; i++){
            if (num %i == 0) //약수구하기 {2부터 자기자신 전까지 나눈다}
                return false;
        }
        return true;
    }
    public static ArrayList<Integer> solution(int n, int[]arr){
        ArrayList<Integer> answer = new ArrayList<>();
        for(int i=0; i<n; i++){
            int tmp = arr[i];
            int res = 0; //뒤집힌 결과를 저장
            while(tmp >0){
                int t = tmp%10; //10으로 나눈 나머지는 '일의 자리수'
                res = res*10 +t;
                tmp = tmp/10;   //몫을 구하기 (/)
            } //0이 되면 나오기
            if (isPrime(res))
                answer.add(res);
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int []arr = new int[n];
        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        for (int x : solution(n, arr)){
            System.out.print(x + " ");
        }
    }
}

7. 점수계산

public class Main07 {
    public static int solution(int n, int[]arr){
        int cnt=0;
        int answer =0;

        for (int i=0; i<n; i++){
            if (arr[i] == 1){
                cnt++;
                answer += cnt;
            }else
                cnt=0;
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int arr[] = new int[n];

        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        System.out.println(solution(n, arr));
    }
}

8. 등수 구하기

public class Main08 {
    public static int[] solution(int n, int []arr){
        int[] answer = new int[n];
        int max = answer[0];
        for (int i=0; i<n; i++){ //기준
            int cnt =1; //처음에는 1등
            for (int j=0; j<n; j++){
                if (arr[j]> arr[i])
                    cnt++;
            }
            answer[i]=cnt; //등수를 집어넣는다
        }
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int arr[] =new int[n];
        for (int i=0; i<n; i++){
            arr[i] = sc.nextInt();
        }
        for (int x : solution(n, arr)){
            System.out.print(x + " ");
        }
    }
}public class Main09 {
    public static int solution(int n, int[][]arr){
        int answer = Integer.MIN_VALUE;
        int sum1; //행의 합
        int sum2; //열의 합
        for(int i=0; i<n; i++){
            sum1=sum2=0; //매번 초기화
            for (int j=0; j<n; j++){
                sum1 += arr[i][j];
                sum2 += arr[j][i];
            }
            answer = Math.max(answer, sum1);
            answer = Math.max(answer, sum2);
        }
        sum1 = sum2 = 0;
        for (int i=0; i<n; i++){
            sum1 += arr[i][i];
            sum2 += arr[i][n-i-1];
        }
        answer = Math.max(answer, sum1);
        answer = Math.max(answer, sum2);
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][] arr = new int[n][n];
        for (int i =0; i<n; i++){
            for (int j=0 ; j<n; j++){
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.print(solution(n, arr));

    }
}

9. 격자판 최대합

public class Main09 {
    public static int solution(int n, int[][]arr){
        int answer = Integer.MIN_VALUE;
        int sum1; //행의 합
        int sum2; //열의 합
        for(int i=0; i<n; i++){
            sum1=sum2=0; //매번 초기화
            for (int j=0; j<n; j++){
                sum1 += arr[i][j];
                sum2 += arr[j][i];
            }
            answer = Math.max(answer, sum1);
            answer = Math.max(answer, sum2);
        }
        sum1 = sum2 = 0;
        for (int i=0; i<n; i++){
            sum1 += arr[i][i];
            sum2 += arr[i][n-i-1];
        }
        answer = Math.max(answer, sum1);
        answer = Math.max(answer, sum2);
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][] arr = new int[n][n];
        for (int i =0; i<n; i++){
            for (int j=0 ; j<n; j++){
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.print(solution(n, arr));

    }
}

  • Integer.MIN_VALUE : 정수의 최솟값 (2147483647)
  • Integer.MIX_VALUE : 정수의 최댓값 (-2147483647)
  • Math.max(int a, int b) : 두 인자 값 중 큰 값을 리턴
  • Math.min(int a, int b) : 두 인자 값중 작은 값을 리턴

10. 봉우리

public class Main10 {
    public static int solution(int n, int arr[][]){
       // 방향 배열
        int [] dx = {-1, 0,1,0};
        int [] dy = {0, 1 , 0, -1};
        int answer = 0;
        for (int i=0; i<n; i++){
            for (int j=0; j<n; j++){
             boolean flag = true;
             for (int k=0; k<4; k++){
                 int nx = i+dx[k];
                 int ny = j+dy[k];
                 if ( nx >=0 && nx<n && ny>=0 && ny<n && arr[nx][ny] >= arr[i][j] ){
                     flag = false;
                     break;
                 }
             }
             if (flag)
                 answer++;
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][]arr = new int[n][n];

        for (int i=0; i<n; i++){
            for (int j=0; j<n; j++){
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.println(solution(n, arr));
    }
}

11. 임시반장 정하기

public class Main11 {
    public static int solution(int n, int [][]arr){
        int answer = 0, max=Integer.MIN_VALUE;
        for(int i=1; i<n; i++){
            int cnt=0;
            for (int j=1; j<=n; j++){ //학생이 1부터 시작함으로 n을 포함시키기 위하여  n+1
                for (int k=1; k<=5; k++){ //  i가 1 증가할때 j는 전체 순회 {i번 학생과 같은 반인 j번 학생을 찾는다}
                    if (arr[i][k]==arr[j][k]){ //k는 학년 {i번 학생과 j번 학생의 학년이 같은지 확인}
                            cnt++;
                            break;
                    }
                }
            }
            if (cnt > max){
                max = cnt;
                answer = i;
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][]arr = new int[n+1][6]; //1번부터 사용하기위해 n+1, 1학년~5학년을 위해서 6
        for (int i=1; i<=n; i++){ // i:학생번호
            for (int j=1; j<=5; j++){ // j:학년
                arr[i][j] = sc.nextInt();
            }
        }
        System.out.println(solution(n, arr));
    }
}

profile
개발기록

0개의 댓글