1. 소수 구하기 (문제 번호 : 1929)
-> 에라토스테네스의 체를 이용하여 소수 구하기
*에라토스테네스의 체
소수인 2를 제외한 2의 배수를 지우고 남은 수 중 또 다른 소수인 3을 제외한 3의 배수를 지워가면서 남는 소수를 구하는 방법
문제 :
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력 :
첫째 줄에 자연수 M과 N이 빈칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)
출력 :
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();
int n = scan.nextInt();
int[] num = new int[n + 1];
for (int i = 2; i <= n; i++) { // 2의 배수부터 ~
for (int j = 2; i * j <= n; j++) { // 2, 3, 5 등을 제외하기 위해 j = 2;
num[i * j] = 1;
}
}
for (int i = m; i <= n; i++) {
if(num[i] != 1 && i != 1) {
System.out.println(i);
}
}
}
}
2. 직각삼각형 (문제 번호 : 4153)
문제 :
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인 것을 알아냈다. 주어진 세 변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력 :
입력은 여러개의 테스트 케이스로 주어지며 마지막 줄에는 0 0 0이 입력된다. 각 테스트 케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력 :
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int temp;
while (true) {
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
int[] array = { a, b, c };
for (int i = 0; i < array.length; i++) { // a, b, c를 정렬하기 위한 for문
for (int j = i+1; j < array.length; j++) {
if(array[i] > array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
if(a == 0 && b == 0 && c == 0){
break;
}else if (Math.pow(array[0], 2) + Math.pow(array[1], 2) == Math.pow(array[2], 2)) {
System.out.println("right");
} else {
System.out.println("wrong");
}
}
}
}
-> 직각삼각형 문제를 풀 때 주의할 점은 a, b, c 순으로 길이가 길다는 정의되어있지 않다. a가 가장 긴 변일 수도 있고 b, c도 마찬가지로 가장 긴 변이 될 수도 있다.
'Study > BEAKJOON Algorithm' 카테고리의 다른 글
13단계 브루트 포스 (0) | 2020.01.21 |
---|---|
11단계 재귀 (0) | 2020.01.21 |
9단계 수학 1 (0) | 2020.01.07 |
7단계 문자열 (0) | 2020.01.03 |
6단계 함수 (0) | 2019.12.30 |