728x90

BOJ 10156 과자

문제

동수는 제과점에 과자를 사러 가는데 현재 가진 돈이 모자랄 경우 부모님께 모자란 돈을 받으려고 한다.

과자 한 개의 가격이 K, 사려고 하는 과자의 개수가 N이고, 현재 가진 돈의 액수를 M이라 할 때 여러분은 동수가 부모님께 받아야 하는 모자란 돈을 계산하려고 한다. 

예를 들어, 과자 한 개의 가격이 30원, 사려고 하는 과자의 개수가 4개, 현재 동수가 가진 돈이 100원이라 할 때, 동수가 부모님께 받아야 하는 돈은 20원이다. 

과자 한 개의 가격이 250원, 사려고 하는 과자의 개수가 2개, 현재 동수가 가진 돈이 140원이라 할 때, 동수가 부모님께 받아야 하는 돈은 360원이다. 

과자 한 개의 가격이 20원, 사려고 하는 과자의 개수가 6개, 현재 동수가 가진 돈이 120원이라 할 때 동수가 부모님께 받아야 하는 돈은 0원이다. 

과자 한 개의 가격이 20원, 사려고 하는 과자의 개수가 10개, 현재 동수가 가진 돈이 320원이라 할 때 동수가 부모님께 받아야 하는 돈은 역시 0원이다. 

과자 한 개의 가격, 사려고 하는 과자의 개수와 동수가 현재 가진 돈의 액수가 주어질 때 동수가 부모님께 받아야 하는 돈의 액수를 출력하는 프로그램을 작성하시오. 

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

입력

첫 번째 줄에는 과자 한 개의 가격 K, 사려고 하는 과자의 개수 N, 현재 동수가 가진 돈 M이 각각 공백을 사이에 두고 주어진다. 

단, K, N은 1,000 이하의 양의 정수이고, M은 10만 이하의 양의 정수이다. (1 ≤ K, N ≤ 1,000, 1 ≤ M ≤ 100,000이다.)

출력

첫 줄에 동수가 부모님께 받아야 하는 돈의 액수를 출력한다.

예제 입력 1

300 4 1000

예제 출력 1

200

예제 입력 2

250 2 140

예제 출력 2

360

예제 입력 3

20 6 120

예제 출력 3

0

예제 입력 4

20 10 320

예제 출력 4

0

풀이

# boj 10156 과자

k, n, m = map(int, input().split())
total = k * n

if total - m < 0:
    print(0)
else:
    print(total - m)
728x90
728x90

BOJ 1292 쉽게 푸는 문제

문제

동호는 내년에 초등학교를 입학한다. 

그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다.

이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 

이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다.

하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자.

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

입력

첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 

즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다.

출력

첫 줄에 구간에 속하는 숫자의 합을 출력한다.

예제 입력 1

3 7

예제 출력 1

15

풀이

# boj 1292 쉽게 푸는 문제

a,b = map(int,input().split()) 
arr = [0]
for i in range(46):
    for j in range(i):
        arr.append(i)
 
print(sum(arr[a:b+1]))
728x90
728x90

BOJ 2530 인공지능 시계

문제

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다.

인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다.

그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 초 단위로 자동적으로 계산한다. 

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.  

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 초 단위로 주어졌을 때,

오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

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

입력

첫째 줄에는 현재 시각이 나온다. 

현재 시각은 시 A (0 ≤ A ≤ 23), 분 B (0 ≤ B ≤ 59)와 초 C (0 ≤ C ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 

두 번째 줄에는 요리하는 데 필요한 시간 D (0 ≤ D ≤ 500,000)가 초 단위로 주어진다.

출력

첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. 

(단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 

디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0분 0초가 된다.)

예제 입력 1

14 30 0
200

예제 출력 1

14 33 20

예제 입력 2

17 40 45
6015

예제 출력 2

19 21 0

예제 입력 3

23 48 59
2515

예제 출력 3

0 30 54

풀이

# boj 2530 인공지능 시계

h, m, s = map(int, input().split())
time = int(input())

h = (h + ((m + ((s + time) // 60))) // 60) % 24
m = ((m + ((s + time) // 60))) % 60
s = (s + time) % 60
print(h, m, s)
728x90
728x90

BOJ 2576 홀수

문제

7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 

고른 홀수들 중 최솟값을 찾는 프로그램을 작성하시오.

예를 들어, 7개의 자연수 12, 77, 38, 41, 53, 92, 85가 주어지면 이들 중 홀수는 77, 41, 53, 85이므로 그 합은

77 + 41 + 53 + 85 = 256

이 되고,

41 < 53 < 77 < 85

이므로 홀수들 중 최솟값은 41이 된다.

시간 제한 : 1 초
메모리 제헌 : 128 MB

입력

입력의 첫째 줄부터 일곱 번째 줄까지 한 줄에 하나의 자연수가 주어진다.

주어지는 자연수는 100보다 작다.

출력

홀수가 존재하지 않는 경우에는 첫째 줄에 -1을 출력한다. 

홀수가 존재하는 경우 첫째 줄에 홀수들의 합을 출력하고, 둘째 줄에 홀수들 중 최솟값을 출력한다.

예제 입력 1

12
77
38
41
53
92
85

예제 출력 1

256
41

예제 입력 2

2
4
20
32
6
10
8

예제 출력 2

-1

풀이

# boj 2576 홀수
import sys
input = sys.stdin.readline
arr = []
for i in range(7):
    a = int(input())
    if a % 2 != 0: arr.append(a)
if arr:
    print(sum(arr))
    print(min(arr))
else:
    print(-1)
728x90
728x90

BOJ 1550 16진수

문제

16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 

16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 

또, 이 수는 음이 아닌 정수이다.

출력

첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다.

예제 입력 1

A

예제 출력 1

10

풀이

# boj 1550 16진수

print(int(input(), 16))
728x90
728x90

BOJ 2587 대표값2

문제

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 

평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 

예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.

평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 

중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다.

예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면

10 30 30 40 60

이 되고 따라서 중앙값은 30이 된다.

다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.

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

입력

첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다.

주어지는 자연수는 100 보다 작은 10의 배수이다.

출력

첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다.

평균과 중앙값은 모두 자연수이다.

예제 입력 1

10
40
30
60
30

예제 출력 1

34
30

풀이

# boj 2587 대표값2

arr = []
for _ in range(5):
    arr.append(int(input()))
print(sum(arr) // 5)
arr.sort()
print(arr[2])
728x90
728x90

BOJ 2914 저작권

문제

창영이는 노래 여러 개를 이어서 부르는 가수이다.

유명한 노래의 비슷한 멜로디를 이어서 부르면서 언제 곡이 넘어갔는지 모르게 만드는 것이 창영이 노래의 특징이다. 

이런 노래로 상업적으로 엄청난 성공을 거둔 창영이에게 큰 시련이 찾아왔다. 그것은 바로 저작권이었다.

창영이의 노래에 포함되어 있는 멜로디는 모두 저작권이 다른 사람에게 있는 노래이다. 

따라서, 이 음악으로 상업적인 활동을 했기 때문에, 저작권 협회에 저작권료를 내야한다.

창영이는 자신의 앨범에 포함되어있는 저작권이 있는 멜로디의 평균값을 구해보기로 했다.

이 값은 아래와 같이 구할 수 있다.

(창영이 앨범에 수록된 곡에 포함되어 있는 저작권이 있는 멜로디의 개수) / (앨범에 수록된 곡의 개수)

이때, 평균값은 항상 올림을 해서 정수로 만들어야 한다. 

예를 들어, 창영이의 1집 앨범 "영창에서 영원히 영창피아노를 친다"에 총 38개 곡이 수록되어 있고, 

이 앨범에 저작권이 있는 멜로디가 894개가 있다면, 평균값은 23.53이 되고 올림해서 24가 된다.

매니저 강산이는 얼마나 많은 사람에게 저작권료를 주어야 하는지 궁금해졌다.

강산이가 알고 있는 정보는 앨범에 수록되어 있는 곡의 개수와 위에서 구한 평균값이다.

이때, 적어도 몇 곡이 저작권이 있는 멜로디인지 구하는 프로그램을 작성하시오.

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

입력

첫째 줄에 앨범에 수록된 곡의 개수 A와 평균값 I가 주어진다. (1 ≤ A, I ≤ 100)

출력

첫째 줄에 적어도 몇 곡이 저작권이 있는 멜로디인지 출력한다.

예제 입력 1

38 24

예제 출력 1

875

예제 입력 2

1 100

예제 출력 2

100

예제 입력 3

10 10

예제 출력 3

91

풀이

# boj 2914 저작권
a, i = map(int, input().split())
print(a * (i-1) + 1)

 

728x90
728x90

BOJ 2738 행렬 덧셈

문제

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

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

입력

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 

둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 

이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다.

N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

출력

첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다.

행렬의 각 원소는 공백으로 구분한다.

예제 입력 1

3 3
1 1 1
2 2 2
0 1 0
3 3 3
4 4 4
5 5 100

예제 출력 1

4 4 4
6 6 6
5 6 100

풀이

# boj 2738 행렬 덧셈
a, b = [], []
n, m = map(int, input().split())

for row in range(n):
    row = list(map(int, input().split()))
    a.append(row)

for row in range(n):
    row = list(map(int, input().split()))
    b.append(row)
    
for row in range(n):
    for col in range(m):
        print(a[row][col] + b[row][col], end=' ')
    print()
728x90

+ Recent posts