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
'알고리즘 이론 [개념] > [개념] 코테 알고리즘 공부 - 시즌 1' 카테고리의 다른 글
효율성[O(n2) -> O(n)] 섹션 - (1) (0) | 2023.03.02 |
---|---|
배열(Array) 섹션 - (3) (0) | 2023.03.01 |
배열(Array) 섹션 - (1) (0) | 2023.02.27 |
String(문자열) 섹션 - (3) (0) | 2023.02.23 |
String(문자열) 섹션 - (2) (0) | 2023.02.22 |