새소식

JAVA (개념, 알고리즘)

2. 배열

  • -

간단한 개념

2차원 배열이 다음과 같이 주어져있다고 하자.

int[][] arr = new int[3][4];

3행 4열일 때, arr.length는 3행을 의미한다.

열의 길이를 알고 싶다면 arr[0].length를 적어주면 된다.

 

1. 소수 개수 뽑기

자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.

만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.

 

입력

첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.

 

출력

첫 줄에 소수의 개수를 출력합니다.

예시 입력 1 

20

예시 출력 1

8

 

< 코드 >

import java.util.Scanner;

public class Main {
    public int solution(int n) {
        int answer = 0;
        int [] arr = new int[n+1];
        for (int i=2; i<=n; i++)
        {
            if(arr[i] == 0) {
                answer++; // 소수이므로 개수 추가
                for (int j=i; j<=n; j=j+i)
                    arr[j] = 1; // 나누어 떨어졌으므로 배열 값을 1로 바꿔준다.
            }
        }
        return answer;
    }

    //static 함수에서 인스턴스 메서드를 호출하려면
    //객체를 생성해줘야 한다.
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(T.solution(n));
    }
}

 

2. 뒤집은 소수

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요.

예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.

첫 자리부터의 연속된 0은 무시한다.

 

입력

첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.

각 자연수의 크기는 100,000를 넘지 않는다.

 

출력

첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

예시 입력 1 

9
32 55 62 20 250 370 200 30 100

예시 출력 1

23 2 73 2 3

 

< 코드 >

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public boolean isPrime(int num)
    {
        if (num ==1) return false;
        for(int i=2; i<num; i++)
        {
            if(num % i == 0)
                return false;
        }
        return true;
    }
    public 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;
                res = res * 10 + t;
                tmp = tmp/10;
            }

            if (isPrime(res))
                answer.add(res);
        }
        return answer;
    }

    //static 함수에서 인스턴스 메서드를 호출하려면
    //객체를 생성해줘야 한다.
    public static void main(String[] args) {
        Main T = new Main();
        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 : T.solution(n, arr))
            System.out.print(x + " ");
    }
}

 

3. 등수 구하기

N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.

같은 점수가 입력될 경우 높은 등수로 동일 처리한다.

즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.

 

입력

첫 줄에 N(3<=N<=100)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력된다.

 

출력

입력된 순서대로 등수를 출력한다.

 

예시 입력 1 

5
87 89 92 100 76

예시 출력 1

4 3 2 1 5

< 코드 >

import java.util.Scanner;

public class Main {
    public int[] solution(int n, int[] arr) {
        int[] answer = new int[n];
        for(int i=0; i<n; i++)
        {
            int cnt=1;
            for(int j=0; j<n; j++)
            {
                if(arr[j]>arr[i])
                    cnt++;
            }
            answer[i] = cnt;
        }
        return answer;
    }

    //static 함수에서 인스턴스 메서드를 호출하려면
    //객체를 생성해줘야 한다.
    public static void main(String[] args) {
        Main T = new Main();
        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 : T.solution(n, arr))
            System.out.print(x + " ");
    }
}

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.