본문 바로가기
학부공부/Java_Basic

Chapter 5. Loops(2)[Java Basic]

by sonpang 2021. 11. 5.
반응형

5.H - π 계산

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

당신은 다음 계산식을 통해서 pi를 계산할 수 있습니다. i를 입력으로 받아 pi를 계산하는 프로그램을 작성하세요.

You can approximate pi by using the following series:

Write a program that displays the pi value for i.

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 정수 i (1~1,00000)

 

OUTPUT

* Line 1 ~ T : pi(소수점 네번째 자리까지 출력, 예: 11.713243의 경우 11.7132로 출력하고 11.0000의 경우 11.0000로 출력)

 

SAMPLE INPUT

3

9

999

99999

 

SAMPLE OUTPUT

3.2523

3.1425

3.1416

import java.util.Scanner;
import java.lang.Math;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(), i, j;
        double pi[] = new double[n], k;
        for(i = 0; i < n; i++){
            j = input.nextInt();
            //pi[i] = 0;
            for(k = 1; k <= j; k++)
                pi[i] += 4 * (k % 2 == 0 ? -1 / (2 * k - 1) : 1 / (2 * k - 1));
        }
        for(i = 0; i < n; i++)
            System.out.printf("%.4f\n",(int)(pi[i] * 10000) / 10000.0);
    }
}



5.I - e 계산

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

당신은 다음 계산식을 통해서 e를 계산할 수 있습니다. i를 입력으로 받아 e를 계산하는 프로그램을 작성하세요.

You can approximate e using the following series:

Write a program that displays the e value for i

 

INPUT

* Line 1 : 테스트케이스 T (1~100)

* Line 2 ~ T+1 : 정수 i (1~100)

 

OUTPUT

* Line 1 ~ T : e(소수점 여섯째자리까지만 출력. sample 참고)

 

SAMPLE INPUT

3

2

8

20

 

SAMPLE OUTPUT

2.500000

2.718278

2.718281

 

import java.util.Scanner;
public class Main {
    private static double cal_f(int n){
        if(n == 0 || n == 1)
            return 1;
        return cal_f(n - 1) * n;
    }
 
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(), i, j, k;
        double e[] = new double[n];
 
        for(i = 0; i < n; i++){
            j = input.nextInt();
            for(k = 0; k <= j; k++)
                e[i] += 1 / cal_f(k);
        }
        for(i = 0; i < n; i++)
            System.out.printf("%.6f\n",(int)(e[i] * 1000000) / 1000000.0);
    }
}



5.J - 달력 출력

Time Limit: 1s Memory Limit: 128MB

DESCRIPTION

년과 월을 입력으로 받아 해당 월의 달력을 출력하는 프로그램을 작성하세요.

Write a program that prompts the user to enter the year and the month and displays the calendar table for the year on the console.

 

INPUT

* Line 1 : year (1,500~3,000)

* Line 2 : month (1~12)

 

OUTPUT

Sample Output 참조

 

SAMPLE INPUT

2013

1

 

SAMPLE OUTPUT

 

HINT

Chapter 6.11 참고

 

import java.util.Scanner;
import java.util.Calendar;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int year = input.nextInt(), month = input.nextInt();
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month-1);
        c.set(Calendar.DATE, 1);
 
        int start = c.get(Calendar.DAY_OF_WEEK);
        int last = c.getActualMaximum(Calendar.DATE);
        int i, j, date = 1, line = 0;
 
        System.out.println("Sun Mon Tue Wed Thu Fri Sat");
        for(i = 1; date <= last; i++){
            line++;
            if(i < start)
                System.out.print("    ");
            else
                System.out.printf("%2d",date++);
 
            if(line % 7 != 0 && date != last + 1){
                if(i >= start)
                    System.out.print("  ");
            }
            else
                System.out.println();
        }
    }
}
반응형



5.K - 많이 나타난 정수

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

N개의 정수를 입력으로 받아, 가장 많이 나타난 정수와 그 개수를 출력하는 프로그램을 작성하세요. 만약 3 5 2 5 5 5을 입력으로 받는다면 가장 많이 나타난 정수는 5이고 그 개수는 4입니다.

Write a program that reads integers, finds the most frequent number of them, and counts its occurrences. Suppose that you entered 3 5 2 5 5 5; the program finds that the most frequent number is 5 and the occurrence count for 5 is 4.

 

INPUT

* Line 1 : 정수의 개수 N (1~1,000)

* Line 2 ~ N+1 : 정수(-1,000,000,000 ~ 1,000,000,000)

 

OUTPUT

* Line 1 : 가장 많은 정수(중복되는 경우 없다고 가정 ex. 가장 많은 정수의 개수가 n일때 x도 n번 y도 n번 나오는 경우 없음)

* Line 2 : 가장 많은 정수의 개수

 

SAMPLE INPUT

6

3

5

2

5

5

5

 

SAMPLE OUTPUT

5

4

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(), i, data[] = new int[n], count[] = new int[n], j, max = 0;
        for(i = 0; i < n; i++){
            data[i] = input.nextInt();
            for(j = 0; j <= i; j++){
                if(data[i] == data[j])
                    count[i]++;
            }
        }
        for(i = 1; i < n; i++){
            if(count[max] < count[i])
                max = i;
        }
        System.out.printf("%d\n%d", data[max], count[max]);
    }



5.L - 2진표현

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

Short 범위에 해당되는 값을 입력 받아, binary로 출력하는 프로그램을 작성하세요.

A short value S is stored in 16 bits. Write a program that prompts the user to enter a short integer and displays the 16 bits for the integer.

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : S (-32,768~32,767)

 

OUTPUT

* Line 1 ~ T : S에 대한 bit 표현

 

SAMPLE INPUT

2

5

-5

 

SAMPLE OUTPUT

0000000000000101

1111111111111011

 

HINT

You need to use the bitwise right shift operator (>>) and the bitwise AND operator (&), which are covered in Appendix G, Bitwise Operations.

 

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        short n = input.nextShort(), data[] = new short[n], i, j;
        for(i = 0; i < n; i++)
            data[i] = input.nextShort();
        for(i = 0; i < n; i++){
            for(j = 15; j >= 0; j--)
                System.out.print((data[i] >> j) & 1);
            System.out.println();
        }
    }
}



5.M - 모음과 자음의 개수

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

A, E, I, O, U를 모음이라고 가정했을때, 입력으로 들어온 문자열이 몇개의 모음과 자음으로 구성되어 있는지 출력하는 프로그램을 작성하세요.

Assume letters A, E, I, O, and U as the vowels. Write a program that prompts the user to enter a string and displays the number of vowels and consonants in the string.

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 문자열 (공백을 포함하며 길이는 100을 넘지 않는다)

 

OUTPUT

* Line 1 ~ T : vowels consonants (공백으로 나누어서 출력)

 

SAMPLE INPUT

2

Programming is fun

Hello World

 

SAMPLE OUTPUT

5 11

3 7

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(), i, j, count[][] = new int[n][2];
        String data = input.nextLine();
        char c;
        for(i = 0; i < n; i++){
            data = input.nextLine();
            data = data.toLowerCase();
            for(j = 0; j < data.length(); j++){
               c = data.charAt(j);
               switch(c){
                   case 'a':
                   case 'e':
                   case 'i':
                   case 'o':
                   case 'u':
                       count[i][0]++;
                       break;
                   case ' ':
                       break;
                   default:
                       count[i][1]++;
               }
            }
        }
        for(i = 0; i < n; i++)
            System.out.println(count[i][0] + " " + count[i][1]);
    }
}

 

 

5.N - Longest common string (난이도:고급)

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

N개의 문자열을 입력으로 받아, 모든 문자열이 공통으로 가지는 longest common string을 출력하는 프로그램을 작성하세요.

Write a program that prompts the user to enter N strings and displays the longest common string of the N strings.

 

INPUT

* Line 1 : 문자열의개수 N (1~100)

* Line 2 ~ N+1 : 문자열 (공백을 포함하며 길이는 100을 넘지 않는다)

 

OUTPUT

* Line 1 : N개의 문자열에서 동일하게 나타나는 longest common string을 출력

 

SAMPLE INPUT

4

AABB

AAABC

AABCC

AAAAA

 

SAMPLE OUTPUT

AA

 

import java.util.Scanner;
public class Main {
    private static String find(String[] data, int n){
        int i, j, k;
        String s, ans = "";
        for(i = 0; i < data[0].length(); i++){
            for(j = i + 1; j <= data[0].length(); j++){
                s = data[0].substring(i, j);
                for(k = 1; k < n; k++)
                    if(!data[k].contains(s))
                        break;
                if(k == n && ans.length() < s.length())
                    ans = s;
            }
        }
        if(ans.length() == 0)
            return "";
        return ans;
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt(), i, j;
        input.nextLine();
        String data[] = new String[n];
        for(i = 0; i < n; i++)
            data[i] = input.nextLine();
        System.out.println(find(data, n));
    }
}

 

 

 

 

반응형

댓글