728x90

BOJ 17256 달달함이 넘쳐흘러

문제

냉장고에서 맛있게 숙성되고 있는 마카롱은 심심한 나머지 새로운 수 체계를 생각해냈다. 

마카롱은 이를 케이크 수라고 이름 붙이고, 다음과 같이 정의했다.

케이크 수는 3개의 자연수 x, y, z로 이루어진 순서쌍이다. (자연수는 1 이상의 정수를 의미한다)
케이크 수 a는 (a.x, a.y, a.z)와 같이 나타낼 수 있다.

또한 마카롱은 케이크 수들을 비교하기 위해 등호 "="도 새로 정의했다.

케이크 수 a, b에 대하여, a = b라는 것은 다음과 같다.
a.x = b.x, a.y = b.y 그리고 a.z = b.z를 동시에 만족한다.

아직 끝나지 않았다. 이 케이크 수는 기존의 수와 다르게 매우 특이한 연산을 적용할 수 있다. 

연산의 이름은 🍰이고 다음과 같이 정의된다!

a 🍰 b = (a.z + b.x, a.y × b.y, a.x + b.z)

SCCC의 회장 욱제는 케이크 수를 이용해 문제를 만들기로 했다.

마카롱과 욱제를 기쁘게 하기 위해서 문제를 풀어주자! 욱제가 만든 문제는 다음과 같다.

케이크 수 a, c 가 주어졌을 때, 다음을 만족하는 케이크 수 b를 계산하자.

a 🍰 b = c

a, c는 b가 항상 유일하게 존재하도록 주어진다.

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

입력

첫째 줄에 케이크 수 a를 구성하는 자연수 a.x, a.y, a.z 가 차례대로 주어진다. (1 ≤ a.x, a.y, a.z ≤ 100)

둘째 줄에 케이크 수 c를 구성하는 자연수 c.x, c.y, c.z 가 차례대로 주어진다. (1 ≤ c.x, c.y, c.z ≤ 100)

출력

문제의 조건을 만족하는 b.x, b.y, b.z를 하나의 공백을 사이에 두고 차례대로 출력한다.

b는 1 ≤ b.x, b.y, b.z ≤ 100 이고 반드시 유일하게 존재한다.

예제 입력 1

15 16 17
19 32 90

예제 출력 1

2 2 75

예제 입력 2

15 8 15
22 8 22

예제 출력 2

7 1 7

풀이

# boj 17256 달달함이 넘쳐흘러

a = list(map(int, input().split()))
c = list(map(int, input().split()))

print(c[0]-a[2], c[1]//a[1], c[2]-a[0])
728x90
728x90

BOJ 10984 내 학점을 구해줘

문제

게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 

학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자. 

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

입력

첫 번째 줄에 학기의 수 T가 주어진다. 

두 번째 줄부터 T개 학기에 대한 정보가 주어진다.

각 학기에 대한 정보는 다음과 같이 구성되어 있다. 

첫 번째 줄에 들었던 과목의 수 N이 주어지고, 다음 N개 줄에 걸쳐서 N개 과목들의 학점 C와 성적 G가 주어진다. (1 ≤ N ≤ 10, 1 ≤ C ≤ 6, C는 정수) 

G는 {0, 0.7, 1, 1.3, 1.7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4, 4.3} 중 하나이며 소수 부분은 최대 한 자리까지 주어진다.

출력

각 학기에 대해 근우의 총 학점과 평점(GPA)을 출력한다. 정답과의 절대 오차는 10^-1까지 허용한다.

예제 입력 1

2
4
3 4.3
2 2.0
4 0.0
2 4.0
3
4 0.0
4 0.0
3 0.0

예제 출력 1

11 2.3
11 0.0

예제 입력 2

2
4
3 4.3
2 2
4 0.0
2 4.0
3
4 0.0
4 0
3 0

예제 출력 2

11 2.3
11 0.0

풀이

# boj 10984 내 학점을 구해줘
t = int(input())
for i in range(t):
    a = int(input())
    h = 0
    p = 0
    for i in range(a):
        c, g = map(str, input().split())
        h += int(c)
        p += float(c) * float(g)
    p = round(p / h, 1)
    print(h, p)
728x90
728x90

BOJ 15439 베라의 패션

문제

베라는 상의 N 벌과 하의 N 벌이 있다. i 번째 상의와 i 번째 하의는 모두 색상 i를 가진다.

N 개의 색상은 모두 서로 다르다.

상의와 하의가 서로 다른 색상인 조합은 총 몇 가지일까?

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

입력

입력은 아래와 같이 주어진다.

N

출력

상의와 하의가 서로 다른 색상인 조합의 가짓수를 출력한다.

제한

1 ≤ N ≤ 2017

N은 정수이다.

예제 입력 1

1

예제 출력 1

0

예제 입력 2

2

예제 출력 2

2

예제 입력 3

5

예제 출력 3

20

풀이

# boj 15439 베라의 패션
n = int(input())
print(n*(n-1))
728x90
728x90

BOJ 15969 행복

문제

코이 초등학교에 새로 부임하신 교장 선생님은 어린 학생들의 행복감과 학생들의 성적 차이 관계를 알아보기로 했다. 

그래서 이전 성적을 조사하여 학생 들의 시험 점수 차이 변화를 알아보려고 한다.

예를 들어서 2016년 학생 8명의 점수가 다음과 같다고 하자.

27, 35, 92, 75, 42, 53, 29, 87

그러면 가장 높은 점수는 92점이고 가장 낮은 점수는 27점이므로 점수의 최대 차이는 65이다. 

한편 2017년 학생 8명의 점수가 다음과 같았다.

85, 42, 79, 95, 37, 11, 72, 32

이때 가장 높은 점수는 95점이고 가장 낮은 점수는 11점이므로 점수의 최대 차이는 84이다.

N명 학생들의 점수가 주어졌을 때, 가장 높은 점수와 가장 낮은 점수의 차이를 구하는 프로그램을 작성하시오

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

입력

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 학생 수 N이 주어진다.

다음 줄에는 N명의 학생 점수가 공백 하나를 사이에 두고 주어진다.

출력

표준 출력으로 가장 높은 점수와 가장 낮은 점수의 차이를 출력한다.

제한

모든 서브태스크에서 2 ≤ N ≤ 1,000이고 입력되는 학생들의 점수는 0 이상 1,000 이하의 정수이다.

서브태스크 1 (23점)

학생 수가 2명인 경우만 존재한다.

서브태스크 2 (29점)

점수가 낮은 점수부터 높은 점수까지 순서대로 주어진다.

서브태스크 3 (48점)

원래의 제약 조건 이외에 아무 제약 조건이 없다.

예제 입력 1

5
27 35 92 75 42

예제 출력 1

65

예제 입력 2

8
85 42 79 95 37 11 72 32

예제 출력 2

84

풀이

# boj 15969 행복
n = input()
arr = list(map(int, input().split()))
print(max(arr) - min(arr))
728x90
728x90

BOJ 2965 캥거루 세마리

문제

캥거루 세 마리가 사막에서 놀고 있다. 

사막에는 수직선이 하나 있고, 캥거루는 서로 다른 한 좌표 위에 있다.

한 번 움직일 때, 바깥쪽의 두 캥거루 중 한 마리가 다른 두 캥거루 사이의 정수 좌표로 점프한다. 

한 좌표 위에 있는 캥거루가 두 마리 이상일 수는 없다.

캥거루는 최대 몇 번 움직일 수 있을까?

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

입력

첫째 줄에 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100)

출력

캥거루가 최대 몇 번 움직일 수 있는지 출력한다.

예제 입력 1

2 3 5

예제 출력 1

1

예제 입력 2

3 5 9

예제 출력 2

3

풀이

# boj 2965 캥거루 세마리
a, b, c = map(int, input().split())
d = max(b - a, c - b)
print(d - 1)
728x90
728x90

BOJ 9325 얼마?

문제

해빈이는 학교를 다니면서 틈틈히 번 돈으로 자동차를 사려고 한다. 

자동차에 여러 가지 옵션을 포함시킬 수 있는데 해빈이는 덧셈과 곱셈을 하지 못하기 때문에 친구 태완이에게 도움을 청했다.

하지만 태완이도 덧셈과 곱셈을 못한다.

불쌍한 이 두 친구를 위해 모든 옵션이 주어진 자동차를 구매하는데 필요한 액수를 계산해 주자.

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

입력

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

각 테스트 케이스의 첫 줄엔 자동차의 가격 s가 주어진다. (1 ≤ s ≤ 100 000)

둘째 줄엔 해빈이가 구매하려고 하는 서로 다른 옵션의 개수 n이 주어진다. (0 ≤ n ≤ 1 000)

뒤이어 n개의 줄이 입력으로 들어온다. 

각 줄은 q 와 p로 이루어져 있는데 q는 해빈이가 사려고 하는 특정 옵션의 개수이고 p는 해당 옵션의 가격이다. (1 ≤ q ≤ 100, 1 ≤ p ≤ 10 000)

출력

각 테스트 케이스 마다, 해빈이가 최종적으로 구매하려는 자동차의 가격을 한줄씩 출력한다.

예제 입력 1

2
10000
2
1 2000
3 400
50000
0

예제 출력 1

13200
50000

풀이

# boj 9325 얼마?
import sys
input = sys.stdin.readline
t = int(input())

for _ in range(t):
    s = int(input())
    n = int(input())
    res = s
    
    for _ in range(n):
        q, p = map(int, input().split())
        res += q * p
        
    print(res)
728x90
728x90

BOJ 13241 최소공배수

문제

정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다.

예:
10은 5의 배수이다 (5*2 = 10)
10은 10의 배수이다(10*1 = 10)
6은 1의 배수이다(1*6 = 6)
20은 1, 2, 4,5,10,20의 배수이다.

다른 예:
2와 5의 최소공배수는 10이고, 그 이유는 2와 5보다 작은 공배수가 없기 때문이다.
10과 20의 최소공배수는 20이다.
5와 3의 최소공배수는 15이다.

당신은 두 수에 대하여 최소공배수를 구하는 프로그램을 작성 하는 것이 목표이다.

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

입력

한 줄에 두 정수 A와 B가 공백으로 분리되어 주어진다.

50%의 입력 중 A와 B는 1000(103)보다 작다. 다른 50%의 입력은 1000보다 크고 100000000(108)보다 작다.

추가: 큰 수 입력에 대하여 변수를 64비트 정수로 선언하시오.

C/C++에서는 long long int를 사용하고, Java에서는 long을 사용하시오.

출력

A와 B의 최소공배수를 한 줄에 출력한다.

예제 입력 1

1 1

예제 출력 1

1

예제 입력 2

3 5

예제 출력 2

15

예제 입력 3

1 123

예제 출력 3

123

예제 입력 4

121 199

예제 출력 4

24079

풀이

# boj 13241 최소공배수

a, b = map(int, input().split())

def gcd(a, b):
    while b:
        mod = b
        b = a % b
        a = mod
    return a

print(a*b // gcd(a, b))
728x90
728x90

BOJ 20492 세금

문제

선린인터넷고등학교의 한 학생은 프로그래밍 대회에 참가하여 거액의 상금을 수상하는 영광을 누리게 되었다.

하지만, 이 학생이 상금 금액의 전부를 수령하게 되는 것은 아니다.

상금의 일부를 제세공과금으로 납부하고, 나머지 금액을 수령하게 된다.

일반적으로, 대회에서 상금을 받으면 전체 금액의 22%를 제세공과금으로 국가에 납부하고, 나머지 금액을 수령하게 된다.

하지만, 상금의 80%를 필요 경비로 인정하게 되면, 나머지 20% 중 22%만을 제세공과금으로 납부해도 된다.

대회 상금의 금액이 주어질 때, 다음 두 경우 각각에 대해 이 학생이 실제로 수령하는 금액을 구해보자.

1. 전체 상금의 22%를 제세공과금으로 납부하는 경우
2. 상금의 80%를 필요 경비로 인정받고, 나머지 금액 중 22%만을 제세공과금으로 납부하는 경우

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

입력

상금의 금액을 나타내는 하나의 정수 N이 주어진다.

출력

1번 경우에 대한 답과 2번 경우에 대한 답을 사이에 공백을 두고 출력한다.

제한

1,000 <= N <= 10,000,000
 
N은 1,000의 배수

예제 입력 1

10000000

예제 출력 1

7800000 9560000

예제 입력 2

1000

예제 출력 2

780 956

풀이

# boj 20492 세금

n = int(input())
print(int(n*0.78), int(n*0.8 + (n*0.2*0.78)))
728x90

+ Recent posts