5086 배수와 약수
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if (a==b && b==0) break;
if (b%a==0) System.out.println("factor");
else if (a%b==0) System.out.println("multiple");
else System.out.println("neither");
}
br.close();
}
}
2501 약수 구하기
브루트포스 알고리즘이란?
가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족하는 결과만을 가져온다.
알고리즘 분류에 적혀있어서 그냥 단순무식하게 풀었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int j=0;
int[] n = new int[a];
for (int i=1;i<=a;i++){
if(a%i==0){
n[j]=i;
j++;
}
}
if(n[b]==0) System.out.println(0);
else System.out.println(n[b-1]);
br.close();
}
}
9506 약수들의 합
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
int a = Integer.parseInt(br.readLine());
if (a == -1) break;
int sum=0;
int[] n = new int[a];
int j=0;
for (int i=1; i<a; i++){
if (a%i==0){
n[j++] = i;
sum+=i;
}
}
if(sum != a) {
System.out.println(a + " is NOT perfect.");
continue;
}
System.out.print(a + " = ");
for (int i=0;i<a;i++){
if(n[i+1]==0){
System.out.print(n[i]);
break;
}
else{
System.out.print(n[i] + " + ");
}
}
System.out.println();
}
}
}
코드는 문제대로 천천히 짜면 된다. 배열을 사용해서 순서대로 약수를 저장했다.
마지막 출력이 약간 어려웠음.
입력받은 수가 -1이면 break로 while문을 나가야 하는데 조건문을 배열 선언보다 뒤에 놔서 NegativeArraySize error가 나왔다;; 이거때문에 시간 낭비함.
1978 소수찾기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static boolean is_true(int x){
for (int i=2; i<x;i++){
if (x%i==0) return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=0;
int a = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i=0;i<a;i++){
int k = Integer.parseInt(st.nextToken());
if (k==1) continue;
if (is_true(k)) n++;
}
System.out.println(n);
}
}
새로 메서드 is_true()를 선언해서 풀어주었다.
2581 소수
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static boolean is_true(int x){
if (x==1) return false;
for (int i=2; i<x;i++){
if (x%i==0) return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int b = Integer.parseInt(br.readLine());
int sum=0;
int j=0;
int[] arr = new int[b-a+1];
for (int i=a;i<=b;i++){
if (is_true(i)){
sum+=i;
arr[j++]=i;
}
}
if (arr[0]!=0){
System.out.println(sum);
System.out.println(arr[0]);
}
else System.out.println(-1);
}
}
전 메서드 반복
아마 이거말고 에라토스테의 체였나?? 그걸 쓰면 소수 더 빠르게 판별할 수 있는걸로 아는데
아마 뒤에 수가 커지면 시간 제한때문에 쓸거같아서 안썼다.
11653 소인수분해
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void fac(int x){
int d=2;
while (d<=x){
if (x%d==0){
System.out.println(d);
x = x/d;
}
else d = d+1;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
fac(a);
}
}
소인수분해 할 X가 주어지면 X가 소수인 수(d)로 나누어 떨어질때마다 그 수를 출력한다.
어느 한 소수에서 다 나누어지면 d+1로 다음 나누어질 소수를 찾는다.
간단한 문제였다.
# 회고
처음으로 메서드를 이용해 문제를 풀었다.
멤버 접근 지정(public/private/protected/default),
static/non-static 설정과
return (void, boolean, int 등) 및 입력받을 인자를 사용해 메서드를 이용한다.
자바는 따로 클래스가 있는데, 메소드는 클래스의 기능 구현이라고 보면 된다. 만약 다른 클래스의 메소드를 활용하고 싶다면, 클래스 생성을 먼저 한 후 메소드를 호출해야 한다.
클래스는 코드의 구조, 기능들을 명세하는 것이고 메소드는 기능을 상세하게 기술하는 것이라 생각하자.
클래스의 구조에 따라 새로운 객체를 생성할 수 있고, 이를 인스턴스라 한다.
생성자는 객체가 생성될 때 초기화 목적으로 실행되는 메소드로, 객체가 생성되면 자동 호출된다. 클래스 이름과 동일함.
옛날에 배운 기억이 난다...
'코딩테스트' 카테고리의 다른 글
[JAVA] 시간 복잡도 단계 (0) | 2024.01.24 |
---|---|
[JAVA] 기하: 직사각형과 삼각형 (1) | 2024.01.23 |
[JAVA] 일반 수학 1단계 (0) | 2024.01.19 |
[JAVA] 2차원 배열 (0) | 2024.01.18 |
[JAVA] 심화 1 (0) | 2024.01.17 |