[백준] - JAVA[2]

hybiis·2023년 3월 23일
0

백준 - JAVA

목록 보기
3/3

1. [11653] - 소인수분해

📖Q1.

문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

✍A1.

import java.util.*;
public class Main {
    public static void main(String[] args) {

        Scanner in= new Scanner(System.in);
        int a = in.nextInt();

		for(int i=2; i<=Math.sqrt(a);i++){
			while(a%i == 0){
				System.out.println(i);
				a/=i;
			}
		}
		if(a != 1){
			System.out.println(a);
		}
	}
}

2. [1924] - 2007년

📖Q2.

문제
오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력
첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력
첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

✍A2.

import java.util.*;
public class Main {
    public static void main(String[] args) {

        Scanner in= new Scanner(System.in);
        int m = in.nextInt();
		int d = in.nextInt();

		String days[]={"MON", "TUE", "WED", "THU", "FRI", "SAT","SUN"};
		int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

		int n=0;
		for(int i=0;i<m;i++){
			n+=month[i];
		}

		n+=d-1;
		System.out.println(days[n%7]);
	}
}

3. [4153] - 직각삼각형

📖Q3.

문제
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

✍A3.

import java.util.*;
public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c = sc.nextInt();

            if(a == 0 && b == 0 && c == 0) break;

			//피타고라스의 정리 => a^2+b^2=c^2을 이용
            if ((a * a + b * b) == (c * c)) {
                System.out.println("right");
            } else if (a * a == b * b + c * c) {
                System.out.println("right");
            } else if (a * a + c * c == b * b) {
                System.out.println("right");
            } else {
                System.out.println("wrong");
            }
        }
    }
}

4. [9461] - 파도반 수열

📖Q4.

문제
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.
파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.
N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오.

입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ N ≤ 100)

출력
각 테스트 케이스마다 P(N)을 출력한다.

✍A4.

import java.util.*;
public class Main {

    public static Long[] seq =new Long[101];
    
    public static long pado (int n){
        if(seq[n]==null){
            seq[n]=pado(n-2)+pado(n-3);
        }
    return seq[n];
    }
    
    public static void main(String[] args) {

        Scanner sc= new Scanner(System.in);

        seq[0]=0L;
        seq[1]=1L;
        seq[2]=1L;
        seq[3]=1L;

        int a=sc.nextInt();

        while(a --> 0){
            int n=sc.nextInt();
            System.out.println(pado(n));
        }

    }
}

5. [2748] - 피보나치 수 2

📖Q5.

문제
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
n=17일때 까지 피보나치 수를 써보면 다음과 같다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력
첫째 줄에 n이 주어진다. n은 90보다 작거나 같은 자연수이다.

출력
첫째 줄에 n번째 피보나치 수를 출력한다.

✍A5.

import java.util.*;
public class Main {
    static  long seq[];
    public static void main(String[] args) {
        Scanner sc =new Scanner (System.in);

        int n=sc.nextInt();
        seq = new long[n + 1];

        for(int i = 0; i < n + 1; i++) {
            seq[i] = -1;
        }
        seq[0]=0;
        seq[1]=1;
        System.out.println(fido(n));
    }
    public static long fido(int n){
        if(seq[n]==-1){
            seq[n]=fido(n-1)+fido(n-2);
        }
        return seq[n];
    }
}
profile
초보 개발자

0개의 댓글