배열(Array) 섹션 - (2)

728x90

배열(Array) 섹션 - (2)

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

소수 : 1보다 큰 자연수 중 1과 자기 자신만을 약수로 갖는 수

import java.util.Scanner;

/* 2-5. 소수(에라토스테네스 체) 
 * 
 * [설명] 
 * 자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.
 * */
public class Main1 {
    //솔루션 함수
    public int solution(int n) {
        int answer = 0;
        //int [] 배열 타입은 처음 생성시 기본값 0으로 세팅되어 있다. 
        int[] ch = new int[n+1];

        for(int i = 2; i<=n; i++) {
            if(ch[i] == 0) {
                answer++; //카운팅
                //현재 찍은 i의 배수 전부 1로 세팅
                for(int j = i; j<=n; j= j + i) { 
                            //j = i의 배수 크기로 증가해야 함
                    ch[j] = 1; //세팅 
                }
            }
        }
        return answer;
    }
    //실행 메인 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Main1 T = new Main1();

        Scanner kb = new Scanner(System.in);
        //입력 N
        int n = kb.nextInt();

        //출력 
        System.out.println(T.solution(n));
    }
}

2-6. 뒤집은 소수

/* 2-6. 뒤집은 소수
 * N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요.
   예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 
   그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.
   첫 자리부터의 연속된 0은 무시한다.
*/
public class Main2 {
    //소수 판별 함수 
    public boolean isPrime(int num) {
        if(num == 1) return false;
        for(int i = 2; i<num; i++) {
            //1제외 i=2~num 전 까지 약수가 존재하면 false
            if(num % i == 0) return false;
        }
        //아니면 소수 맞음
        return true;
    }
    //솔루션 함수 
    public ArrayList<Integer> solution(int n, int[] arr) {
        ArrayList<Integer> answer = new ArrayList<>();
        //1) 숫자 뒤집기
        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;
            }
            //2) 뒤집은 숫자의 소수 판별 -> 답에 add()
            if(isPrime(res)) answer.add(res);
        }        
        return answer;
    }
    //실행 메인 
    public static void main(String[] args) {
        Main2 T = new Main2();
        Scanner kb = new Scanner(System.in);

        int n = kb.nextInt();
        int arr[] = new int[n];
        for(int i = 0; i<n; i++) {
            arr[i] = kb.nextInt();
        }
        //출력
        for(int x : T.solution(n, arr)) {
            System.out.print(x + " ");
        }
    }
}

2-7. 점수 계산 | 연속 정답에 가산점 주는 점수 계산 문제

import java.util.Scanner;

/* 2-7. 점수 계산 
 * 설명
[입력]
첫째 줄에 문제의 개수 N (1 ≤ N ≤ 100)이 주어진다. 
둘째 줄에는 N개 문제의 채점 결과를 나타내는 0 혹은 1이 빈 칸을 사이에 두고 주어진다.
 (0은 문제의 답이 틀린 경우이고, 1은 문제의 답이 맞는 경우이다.)
[출력]
첫째 줄에 입력에서 주어진 채점 결과에 대하여 가산점을 고려한 [총 점수를 출력]한다.
 * */
public class Main3 {

    //솔루션 함수 
    public int solution(int n, int[] arr) {
        int answer = 0; //총점
        int cnt=0; 
        //각각의 arr[i]에 대해서
            //1) 1이면 cnt++ , answer에 누적 
            //2) 0이면 cnt = 0;  
        for(int i =0; i<n; i++) {
            if(arr[i] == 1) { //1나오면 계속 ++ 하다가 
                cnt++;
                answer += cnt; //총점 누적 
            }
            else cnt = 0; //0 나오면 0 리셋
        }
        return answer;
    }

    //실행 메인 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Main3 T = new Main3();
        Scanner kb = new Scanner(System.in);
        //입력
        int n = kb.nextInt();
        int[] arr = new int[n];
        for(int i =0; i<n; i++) {
            arr[i] = kb.nextInt();
        }
        //출력
        System.out.println(T.solution(n, arr));
    }
}

2-8. 등수 구하기

  • 이중 for문 돌면서 각 i의 숫자를 모든 j들이 비교하며 큰 수 누적cnt++
  • cnt는 등수가 됨
import java.util.ArrayList;
import java.util.Scanner;

/* 2-8. 등수 구하기 
 * [설명] 
 * N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요.
   같은 점수가 입력될 경우 높은 등수로 동일 처리한다.
   즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.
 */
public class Main4 {
    //솔루션 함수 
    public int[] solution(int n, int[] arr){
        //기본 생성 시 0출력 
        //등수 
        int[] answer = new int[n];

        for(int i =0; i<n; i++) {
            int cnt = 1; //등수 누적시키기
            for(int j = 0; j<n; j++) {
                if(arr[i] < arr[j]) cnt++;
            }
            answer[i] = cnt; //등수 담음 
        }
        return answer;
    }
    //실행 메인 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Main4 T = new Main4();
        Scanner kb = new Scanner(System.in);
        //입력
        int n = kb.nextInt();

        int[] arr = new int[n];
        for(int i = 0; i<n; i++) {
            arr[i] = kb.nextInt();
        }
        //출력 
        for(int x: T.solution(n, arr)) {
            System.out.print(x + " ");
        }
    }
}
728x90