Array(1, 2차원 배열)

1. 큰 수 출력하기

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;
import java.util.stream.Stream;

public class 큰_수_출력하기 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String str = in.nextLine();
        String answer = "";

        int[] arr = Stream.of(str.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        // arr [7, 3, 9, 5, 6, 12]
        answer += arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[i - 1]) answer += " " + arr[i];
        }

        System.out.println(answer);
    }
}

Ref

2. 보이는 학생

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;
import java.util.stream.Stream;

public class 보이는_학생 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String str = in.nextLine();
        int[] arr = Stream.of(str.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        int max = Integer.MIN_VALUE;
        int answerCnt = 0;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                answerCnt++;
                max = arr[i];
            }
        }

        System.out.println(answerCnt);
    }
}

3. 가위 바위 보

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;
import java.util.stream.Stream;

public class 가위_바위_보 {
    private static int GAME_INFO = 4;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int cnt = Integer.parseInt(in.nextLine());
        String infoA = in.nextLine();
        String infoB = in.nextLine();

        int[] arrA = Stream.of(infoA.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        int[] arrB = Stream.of(infoB.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();

        for (int i = 0; i < cnt; i++) {
            String winner = "D";
            // TODO : 경우의 수
            // TODO : 1 < 2
            // TODO : 2 < 3
            // TODO : 1 > 3
            // TODO : same number

            int a = arrA[i];
            int b = arrB[i];

            if (a == b) winner = "D";
            if (a == 1) {
                if (b == 2) {
                    winner = "B";
                }
                if (b == 3) {
                    winner = "A";
                }
            }
            if (a == 2) {
                if (b == 1) {
                    winner = "A";
                }
                if (b == 3) {
                    winner = "B";
                }
            }
            if (a == 3) {
                if (b == 1) {
                    winner = "B";
                }
                if (b == 2) {
                    winner = "A";
                }
            }

            System.out.println(winner);
        }
    }
}

4. 피보나치 수열

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;

public class 피보나치_수열 {
    private static Scanner in = new Scanner(System.in);
    private static int num = Integer.parseInt(in.nextLine());
    private static int[] arr = new int[num];

    public static void main(String[] args) {

        pvnc(0);
        for (int i = 0; i < num; i++) {
            if (i == num - 1) System.out.print(arr[i]);
            else System.out.print(arr[i] + " ");
        }
    }

    private static void pvnc(int idx) {
        if (idx == num - 1) {
            arr[idx] = arr[idx - 1] + arr[idx - 2];
            return;
        }
        if (idx == 0 || idx == 1) {
            arr[idx] = 1;
            idx++;
            pvnc(idx);
        } else {
            arr[idx] = arr[idx - 1] + arr[idx - 2];
            idx++;
            pvnc(idx);
        }
    }
}

5. 소수 (에라토스 체)

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;

public class 소수_에라토스테네스체 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int[] arr = new int[num + 1]; 

        int cnt = 0;

        for (int i = 2; i <= num; i++) {
            if (arr[i] == 0) {
                cnt++;
                for (int j = i; j <= num; j += i) arr[j] = 1;
            }
        }

        System.out.println(cnt);
    }

    private static boolean isPrimeNum(int prime) {
        for (int i = 2; i < prime; i++) {
            if (prime % i == 0) return false;
        }
        return true;
    }
}

Ref

6. 뒤집은 소수

package com.codingtest.Algorithm.Chapter2.Array;

import java.util.Arrays;
import java.util.Scanner;

public class 뒤집은_소수 {
    private static int[] arr;
    private static long MAX_NUMBER = 100000;
    private static int[] isPrimeArr = new int[100000 + 1];

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String str = in.nextLine();
        StringBuffer sb = new StringBuffer(str);
        sb = sb.reverse();

        String answer = "";

        arr = Arrays.stream(sb.toString().split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();

        isPrimeArr[0] = 1;
        isPrimeArr[1] = 1;

        makePrime();

        for (int i = 0; i < arr.length; i++) {
            if (isPrime(arr[i])) answer += arr[i] + " ";
        }

        int[] answerArr = Arrays.stream(answer.split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        for (int i = answerArr.length - 1; i >= 0; i--) {
            if (i == 0) System.out.print(answerArr[i]);
            else System.out.print(answerArr[i] + " ");
        }
    }
    private static boolean isPrime(int num) {
        if (isPrimeArr[num] == 0) return true;

        return false;
    }

    private static void makePrime() {
        for (int i = 2; i <= MAX_NUMBER; i++) {
            if (isPrimeArr[i] == 0) {
                for (int j = i + i; j <= MAX_NUMBER; j = j + i) {
                    isPrimeArr[j] = 1;
                }
            }
        }
    }
}

7. 점수 계산

package com.codingtest.Algorithm.Chapter2;

import java.util.Scanner;

public class 점수_계산 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        int[] arr = new int[len];
        for (int i = 0; i < len; i++) {
            arr[i] = in.nextInt();
        }
        System.out.println(calculateScore(arr));
    }

    private static int calculateScore(int[] answerSheet) {
        int score = 0;
        int seqCnt = 0;

        for (int i = 0; i < answerSheet.length; i++) {
            if (answerSheet[i] == 1) {
                score += seqCnt + 1;
                seqCnt++;
            }
            if (answerSheet[i] == 0) {
                seqCnt = 0;
            }
        }
        return score;
    }
}

8. 등수 구하기

package com.codingtest.Algorithm.Chapter2;

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.IntStream;

public class 등수구하기 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int len = in.nextInt();
        int[] arr = new int[len + 1];
        arr[0] = Integer.MAX_VALUE;
        for (int i = 1; i < len + 1; i++) {
            arr[i] = in.nextInt();
        }
        calculateRank(arr);
    }

    private static void calculateRank(int[] scores) {
    
        Integer[] temp = Arrays.stream(scores).boxed().toArray(Integer[]::new);
        Arrays.sort(temp, Collections.reverseOrder());

        for (int i = 1; i < scores.length; i++) {
            int score = scores[i];
            System.out.print(indexOf(score, temp) + " ");
        }
    }

    private static int indexOf(int val, Integer[] arr) {

        return IntStream.range(1, arr.length)
                .filter(i -> arr[i] == val)
                .findFirst()
                .orElse(-1);
    }
}

Ref

9. 격자판 최대합

package com.codingtest.Algorithm.Chapter2;

import java.util.Arrays;
import java.util.Scanner;

public class 격자판_최대합 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] arr = new int[n + 1][n + 1];

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                arr[i][j] = in.nextInt();
            }
        }
        getColSum(arr, n);
        getRowSum(arr, n);
        getCrossSum(arr, n);

        System.out.println(getMaxSum(arr, n));
    }

    private static void getColSum(int[][] arr, int n) {
        for (int i = 1; i <= n; i++) {
            int sum = 0;
            for (int j = 1; j <= n; j++) {
                sum += arr[j][i];
            }
            arr[0][i] = sum;
        }
    }

    private static void getRowSum(int[][] arr, int n) {
        for (int i = 1; i <= n; i++) {
            int sum = 0;
            for (int j = 1; j <= n; j++) {
                sum += arr[i][j];
            }
            arr[i][0] = sum;
        }
    }

    private static void getCrossSum(int[][] arr, int n) {
        int sumLeft = 0;
        int sumRight = 0;
        for (int i = 1; i <= n; i++) {
            sumLeft += arr[i][i];
        }
        for (int i = 1; i <= n; i++) {
            sumRight += arr[i][n - i + 1];
        }
        arr[0][0] = Math.max(sumLeft, sumRight);
    }

    private static int getMaxSum(int[][] arr, int n) {
        int max = 0;
        for (int i = 0; i <= n; i++) {
            int tempMax = Math.max(arr[0][i], arr[i][0]);
            max = Math.max(tempMax, max);
        }
        return max;

    }
}

Ref

Last updated