티스토리 뷰

Q.9498 시험 성적

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

 

입력 :

- 첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 자연수이다.

 

출력 :

- 시험 성적을 출력한다.

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
 
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        
        if(score > 89 && score <= 100)
            System.out.println("A");
        else if(score > 79 && score <= 89)
            System.out.println("B");
        else if(score > 69 && score <= 79)
            System.out.println("C");
        else if(score > 59 && score <= 69)
            System.out.println("D");
        else 
            System.out.println("F");
   
    }
}
cs

 

====================================================================================

Q.10817 세 수

세 정수 A, B, C가 주어진다. 이 때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

 

입력 :

- 첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

 

출력 :

- 두 번째로 큰 정수를 출력한다.

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
 
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] a = new int[3];
        
        for(int i = 0; i < 3; i++)
            a[i] = sc.nextInt();
        
        Arrays.sort(a);
        
        System.out.println(a[1]);
    }
}
cs

 

Arrays.sort(array name) : 배열을 요소를 오름차순으로 정렬한다.

 

====================================================================================

Q.10871 X보다 작은 수

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이 때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

 

입력 :

- 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

- 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

 

출력 :

- X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();int x = sc.nextInt();
        
        int[] array = new int[n];
        
        for(int i = 0; i < n; i++)
            array[i] = sc.nextInt();
        
        for(int i = 0; i < n; i++) {
            if(array[i] < x)
                System.out.print(array[i]+" ");
        }
    }
}
cs

 

 

====================================================================================

Q.1546 평균

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최대값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

 

입력 :

- 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

 

출력 :

- 첫째 줄에 새로운 평균을 소수점 셋째 자리에서 반올림해 둘째자리까지 출력한다.

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sum = 0;
        double m = 0;
        
        int n = sc.nextInt();
        double[] score = new double[n];
        
        for(int i = 0; i < n; i++) {
            score[i] = sc.nextInt();
            sum += score[i];
            if(score[i] > m)
                m = score[i];
        }
        System.out.printf("%.2f", (sum/m*100)/n);
    }
}
cs

 

printf("%.숫자f", 변수) : 소수점 '숫자'째 자리 까지 출력한다.

 

Math.floor(a):  버림.

Math.ceil(a); 올림.

Math.round(a);   반올림.
Math.abs(a);  절대값.

 

====================================================================================

Q.4344 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

입력 :

- 첫째 줄에는 테스트케이스 C가 주어진다.

- 둘째 줄부터 각 테스트케이스 마다 첫 수로 정수 N(1 <= N <= 1000)명의 학생이 주어지고 그 다음으로 N명의 0부터 100 사이의 점수가 이어서 주어진다.

 

출력 :

- 각 케이스마다 한줄씩 평균을 넘는 학생들의 비율을 소수점 넷째자리에서 반올림하여 출력한다.

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int C = sc.nextInt();
        
        for(int test_case = 0; test_case < C; test_case++) {
            int N = sc.nextInt();
            int[] score = new int[N];
            int sum = 0;
            int cnt = 0;
            
            for(int i = 0; i < N; i++) {
                score[i] = sc.nextInt();
                sum += score[i];
            }
            double average = sum/N;
            
            for(int i = 0; i < N; i++) {
                if(average < score[i])
                    cnt++;
            }
                
            System.out.printf("%.3f%%\n", (double)cnt/N*100);
        }
    }
}
cs

 

 

*알고리즘

1. 해당 테스트 케이스 평균 구하기
2. 평균을 넘는 인원 수 카운트
3. 해당 테스트 케이스의 (평균을 넘은 인원 수/총 인원수) * 100

 

*printf("") 함수에 특수문자 '%' 출력 방법 : .printf("%%")


 

 

====================================================================================

Q.1110 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 숫자와 앞에서 구한 합의 가장 오른쪽 자리 숫자를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자,

26부터 시작한다. 2+6 = 8이다. 새로운 숫자는 68이다. 6+8 = 14이다. 새로운 숫자는 84이다. 8+4 = 12이다. 새로운 숫자는 42이다. 4+2 = 6이다. 새로운 숫자는 26이다. 위의 예는 4번만에 원래 숫자로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

 

입력 :

- 첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

 

출력 :

- 첫째 줄에 N의 사이클 길이를 출력한다.

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;
 
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cnt = 0;
        
        int N = sc.nextInt();
        int firstNumber = N;
        
        while(true) {
            int r = (N/10+ (N%10);
            N = (N%10)*10 + r%10;
            cnt++;
            if(firstNumber == N)
                break;
        }
        System.out.println(cnt);
    }
}
cs

 

*알고리즘

(1)각 자리의 수를 더한다. (N/10 + N%10)
(2)합의 오른쪽 숫자(N%10*10)과 (1)의 결과값의 오른쪽 수(r%10)를 더한 값을 변수 N에 할당한다.
(3)카운트를 1 증가시킨다.
(4)만약 처음값과 N의 값이 같다면 반복문을 빠져나온다.
==================================================================================== 

 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/step/4



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[백준]1065번 한수  (0) 2017.10.03
[백준]4673번 셀프 넘버  (0) 2017.10.02
[백준]for문 사용해보기  (0) 2017.09.29
[백준]사칙연산 도전하기  (0) 2017.09.26
[백준]입/출력 받아보기  (0) 2017.09.26
댓글