728x90

BOJ 25304 영수증

문제

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 

그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 

준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.

영수증에 적힌,

구매한 각 물건의 가격과 개수
구매한 물건들의 총 금액

을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.

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

입력

첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.

둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.

이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.

출력

구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 

일치하지 않는다면 No를 출력한다.

제한

1 ≤ X ≤ 1,000,000,000
 
1 ≤ N ≤ 100
 
1 ≤ a ≤ 1,000,000
 
1 ≤ b ≤ 10

예제 입력 1

260000
4
20000 5
30000 2
10000 6
5000 8

예제 출력 1

Yes

풀이

# boj 25304 영수증

x = int(input())
n = int(input())
sum = 0

for _ in range(n):
    a, b = map(int, input().split())
    sum += a*b
if x == sum:
    print('Yes')
else:
    print('No')
728x90
728x90

BOJ 1934 최소공배수

문제

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다.

이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 

예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다.

두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.

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

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 

둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000)

출력

첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다.

예제 입력 1

3
1 45000
6 10
13 17

예제 출력 1

45000
30
221

풀이

# boj 1934 최소공배수
import sys

input = sys.stdin.readline
t = int(input())
def gcd(a, b):
    while b > 0:
        a, b = b, a%b
    return a

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

BOJ 1002 터렛

문제

조규현과 백승환은 터렛에 근무하는 직원이다. 하지만 워낙 존재감이 없어서 인구수는 차지하지 않는다.

다음은 조규현과 백승환의 사진이다.

출처 - 백준 온라인 저지

이석원은 조규현과 백승환에게 상대편 마린(류재명)의 위치를 계산하라는 명령을 내렸다.

조규현과 백승환은 각각 자신의 터렛 위치에서 현재 적까지의 거리를 계산했다.

조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 

조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 

류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.

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

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.

한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. 

x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.

출력

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 

만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

예제 입력 1

3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5

예제 출력 1

2
1
0

풀이

# boj 1002 터렛

t = int(input())
for i in range(t):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    d = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
    rs = r1 + r2
    rm = abs(r1 - r2)
    if d == 0:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if d == rs or d == rm:
            print(1)
        elif d < rs and d > rm:
            print(2)
        else:
            print(0)
728x90
728x90

BOJ 2475 검증수

문제

컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 

고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들어간다. 

검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다.

예를 들어 고유번호의 처음 5자리의 숫자들이 04256이면, 

각 숫자를 제곱한 수들의 합 0+16+4+25+36 = 81 을 10으로 나눈 나머지인 1이 검증수이다.

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

입력

첫째 줄에 고유번호의 처음 5자리의 숫자들이 빈칸을 사이에 두고 하나씩 주어진다.

출력

첫째 줄에 검증수를 출력한다.

예제 입력 1

0 4 2 5 6

예제 출력 1

1

풀이

# boj 2475 검증수

arr = map(int, input().split())
res = 0

for n in list(arr):
    res += n**2
print(res%10)
728x90
728x90

BOJ 4153 직각삼각형

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 

주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

출처 - 백준 온라인 저지

입력

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 

각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

예제 입력 1

6 8 10
25 52 60
5 12 13
0 0 0

예제 출력 1

right
wrong
right

풀이

# boj 4153 직각삼각형

res = []
 
while True:
    tri = list(map(int, input().split()))
 
    if sum(tri) == 0:
        break
 
    maximum = max(tri)
    tri.remove(maximum)
 
    if ((maximum ** 2) == (tri[0] ** 2) + (tri[1] ** 2)):
        res.append('right')
    else:
        res.append('wrong')
 
for i in range(0, len(res)):
    print(res[i])
728x90
728x90

BOJ 10757 큰 수 A+B

문제

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

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

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

예제 입력 1

9223372036854775807 9223372036854775808

예제 출력 1

18446744073709551615

풀이

# boj 10757 큰 수 A+B

a, b = map(int, input().split())
print(a+b)
728x90
728x90

BOJ 1924 2007년

문제

오늘은 2007년 1월 1일 월요일이다. 

그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

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

입력

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 

참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력

첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

예제 입력 1

1 1

예제 출력 1

MON

예제 입력 2

3 14

예제 출력 2

WED

예제 입력 3

9 2

예제 출력 3

SUN

예제 입력 4

12 25

예제 출력 4

TUE

풀이

# boj 1924 2007년

week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
sum = 0 
a = [1,3,5,7,8,10,12]
b = [4,6,9,11]
x, y = map(int,input().split())

for i in range(1, x): 
    if i in a :
        sum += 31
    elif i in b :
        sum += 30
    elif i == 2 :
        sum += 28  
    
sum += y
print(week[sum%7])
728x90
728x90

BOJ 11653 소인수분해

문제

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

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

입력

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

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. 

N이 1인 경우 아무것도 출력하지 않는다.

예제 입력 1

72

예제 출력 1

2
2
2
3
3

예제 입력 2

3

예제 출력 2

3

예제 입력 3

6

예제 출력 3

2
3

예제 입력 4

2

예제 출력 4

2

예제 입력 5

9991

예제 출력 5

97
103

풀이

# boj 11653 소인수분해

n = int(input())
while n-1:
    for i in range(2, int(n)+1):
        if n%i == 0:
            print(i)
            n = n/i
            break
728x90

+ Recent posts