728x90

BOJ 1546 평균

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 

일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다.

그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

시간 제한 : 2 초 
메모리 제한 : 128 MB

입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 

이 값은 1000보다 작거나 같다. 

둘째 줄에 세준이의 현재 성적이 주어진다.

이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력

첫째 줄에 새로운 평균을 출력한다. 

실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

예제 입력 1

3
40 80 60

예제 출력 1

75.0

예제 입력 2

3
10 20 30

예제 출력 2

66.666667

예제 입력 3

4
1 100 100 100

예제 출력 3

75.25

...생략

예제 입력 6

4
10 20 0 100

예제 출력 6

32.5

예제 입력 7

1
50

예제 출력 7

100.0

예제 입력 8

9
10 20 30 40 50 60 70 80 90

예제 출력 8

55.55555555555556

풀이

# boj 1546 평균

n = int(input())
arr = list(map(int, input().split()))
avg = 0

for i in range(n):
    avg += arr[i] / max(arr) * 100
    
print(avg / n)
728x90
728x90

BOJ 11720 숫자의 합

문제

N개의 숫자가 공백 없이 쓰여있다. 

이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 

둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

예제 입력 1

1
1

예제 출력 1

1

예제 입력 2

5
54321

예제 출력 2

15

예제 입력 3

25
7000000000000000000000000

예제 출력 3

7

예제 입력 4

11
10987654321

예제 출력 4

46

풀이

# boj 11720 숫자의 합

n = int(input())
s = input()
res = 0

for i in range(len(s)):
    res += int(s[i])

print(res)
728x90
728x90

BOJ 15552 빠른 A+B

문제

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 

입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 

단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. 

BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 

단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다.

테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

시간 제한 : 1 초
메모리 제한 : 512 MB

입력

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다.

다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

예제 입력 1

5
1 1
12 34
5 500
40 60
1000 1000

예제 출력 1

2
46
505
100
2000

풀이

# boj 15552 빠른 A+B

import sys

input = sys.stdin.readline
t = int(input())

for i in range(t) :
    a,b = map(int, input().split())
    print(a+b)
728x90
728x90

BOJ 10951 A+B - 4

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

예제 입력 1

1 1
2 3
3 4
9 8
5 2

예제 출력 1

2
5
7
17
7

풀이

# boj 10951 A+B - 4 

while True:
    try:
        a, b = map(int, input().split())
        print(a + b)
    except:
        break
728x90
728x90

BOJ 11022 A+B - 8

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. 

x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

예제 입력 1

5
1 1
2 3
3 4
9 8
5 2

예제 출력 1

Case #1: 1 + 1 = 2
Case #2: 2 + 3 = 5
Case #3: 3 + 4 = 7
Case #4: 9 + 8 = 17
Case #5: 5 + 2 = 7

풀이

# boj 11022 A+B - 8

t = int(input())

for i in range(t):
    a, b = map(int, input().split())
    print(f"Case #{i+1}: {a} + {b} = {a+b}")
728x90
728x90

BOJ 11021 A+B - 7

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다.

테스트 케이스 번호는 1부터 시작한다.

예제 입력 1

5
1 1
2 3
3 4
9 8
5 2

예제 출력 1

Case #1: 2
Case #2: 5
Case #3: 7
Case #4: 17
Case #5: 7

풀이

# boj 11021 A+B - 7

t = int(input())

for i in range(t):
    a, b = map(int, input().split())
    print(f"Case #{i+1}:",a+b)
728x90
728x90

BOJ 10818 최소,최대

문제

N개의 정수가 주어진다. 

이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다.

둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 

모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

예제 입력 1

5
20 10 35 30 7

예제 출력 1

7 35

풀이

# boj 10818 최소, 최대

n = int(input())
arr = list(map(int, input().split()))

print(min(arr), max(arr))
728x90
728x90

BOJ 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의 사이클의 길이를 구하는 프로그램을 작성하시오.

시간 제한 : 2 초
메모리 제한: 128 MB

입력

첫째 줄에 N이 주어진다. 

N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

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

예제 입력 1

26

예제 출력 1

4

예제 입력 2

55

예제 출력 2

3

예제 입력 3

1

예제 출력 3

60

예제 입력 4

0

예제 출력 4

1

예제 입력 5

71

예제 출력 5

12

풀이

# boj 1110 더하기 싸이클

n = int(input())  
num = n
cnt = 0

while True:
    a = num//10
    b = num %10
    c = (a+b)%10
    num = (b*10) + c
    cnt += 1
    if(num == n):
        break
 
print(cnt)
728x90

+ Recent posts