Programming/JUNGOL : 정보올림피아드&알고리즘

[JUNGOL 함수2]:579~181

토토모에요 2021. 8. 13. 12:54
728x90
반응형

JUNGOL 정보올림피아드&알고리즘에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.

http://www.jungol.co.kr/

579

문제: 10 이하의 자연수 n을 입력받고 n개의 정수를 입력받아 내림차순으로 정렬하여 출력하는 프로그램을 작성하시오. (배열을 전달하는 함수를 이용한다.)

입력 예

4
10 9 2 15

출력 예

15 10 9 2

code

T=int(input())
a=list(map(int,input().split()))
a.sort(reverse=True)

print(*a)

580

문제: 2016년의 날짜를 두 개의 정수 월 일로 입력받아서 입력된 날짜가 존재하면 "OK!" 그렇지 않으면 "BAD!"라고 출력하는 프로그램을 작성하시오.

입력 예

2 30

출력 예

BAD!

code

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

#2016년
#1월  1~31일
#2월  1~29일
#3월  1~31일
#4월  1~30일
#5월  1~31일
#6월  1~30일
#7월  1~31일
#8월  1~31일
#9월  1~30일
#10월 1~31일
#11월 1~30일
#12월 1~31일

if a[0]>12 or a[0]<1:
    print("BAD!")
elif 1<=a[0]<=7 and a[0]!=2:
    if a[0]%2==1:
        if 1<=a[1]<=31:
            print("OK!")
        else:
            print("BAD!")
    elif a[0]%2==0:
        if 1<=a[1]<=30:
            print("OK!")
        else:
            print("BAD!")
elif a[0]>=8 and a[0]<=12:
    if a[0]%2==1:
        if 1<=a[1]<=30:
            print("OK!")
        else:
            print("BAD!")
    elif a[0]%2==0:
        if 1<=a[1]<=31:
            print("OK!")
        else:
            print("BAD!")
elif a[0]==2:
    if 1<=a[1]<=29:
        print("OK!")
    else:
        print("BAD!")

581 Accepted(20)

문제: 두 개의 정수를 입력받아 절대값이 더 큰 수를 출력하고 두 개의 실수를 입력받아 절대값이 작은 수를 출력하는 프로그램을 작성하시오.
실수는 소수점 이하 2자리까지 출력한다.

입력 예

-50 40
-12.34 5.67

출력 예

-50
5.67

code

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

if abs(a[0])>abs(a[1]):
      print(a[0])
elif abs(a[1])>abs(a[0]):
      print(a[1])

if abs(b[0])>abs(b[1]):
      print(b[1])
elif abs(b[1])>abs(b[0]):
      print(b[0])

582

문제: 원의 넓이를 입력받아 반지름의 길이를 소수 둘째자리까지 출력하는 프로그램을 작성하시오.
원의 넓이 = 반지름 * 반지름 * 3.14 식을 이용하시오.

입력 예

314

출력 예

10.00

code

def re_area(a):
    r=((a/3.14)**(1/2))

    print("%.2f"%r)

a=int(input())
re_area(a)

583

문제: 세 개의 실수를 입력받아, 가장 큰 수를 올림한 정수를 출력하고, 가장 작은 수를 내림한 정수를 출력한 후, 남은 수를 반올림한 정수를 출력하는 프로그램을 작성하시오.
입력되는 실수는 -1000이상 1000이하이다.

입력 예

3.45 51.48 -100.1

출력 예

52 -101 3

code

import math

a=list(map(float,input().split()))
b=[]
if a[0]>a[1] and a[0]>a[2]:
    b.append(math.ceil(a[0]))    
elif a[1]>a[0] and a[1]>a[2]:
    b.append(math.ceil(a[1]))
elif a[2]>a[0] and a[2]>a[1]:
    b.append(math.ceil(a[2]))

if a[0]<a[1] and a[0]<a[2]:
    b.append(math.floor(a[0]))    
elif a[1]<a[0] and a[1]<a[2]:
    b.append(math.floor(a[1]))
elif a[2]<a[0] and a[2]<a[1]:
    b.append(math.floor(a[2]))

if a[0]<a[1]<a[2] or a[2]<a[1]<a[0]:
    b.append(round(a[1]))
elif a[0]<a[2]<a[1] or a[1]<a[2]<a[0]:
    b.append(round(a[2]))
elif a[2]<a[0]<a[1] or a[1]<a[0]<a[2]:
    b.append(round(a[0]))

print(*b)

584

문제: main() 함수 내에는 숫자를 사용하지 말고 즉, #define 을 이용하여 1, 2, 3 세 개의 숫자를 조합하여 가능한 한 모든 합을 출력하는 프로그램을 작성하시오.
출력예와 같이 출력하시오.

출력 예

1 + 1 = 2
1 + 2 = 3
1 + 3 = 4
2 + 1 = 3
2 + 2 = 4
2 + 3 = 5
3 + 1 = 4
3 + 2 = 5
3 + 3 = 6

code

print('''1 + 1 = 2
1 + 2 = 3
1 + 3 = 4
2 + 1 = 3
2 + 2 = 4
2 + 3 = 5
3 + 1 = 4
3 + 2 = 5
3 + 3 = 6''')

585

문제: 10개의 정수를 입력받아 버블정렬로 내림차순 정렬을 하면서 하나의 단계가 끝날 때마다 그 정렬결과를 출력하는 프로그램을 작성하시오.

입력 예

15 93 26 8 43 10 25 88 75 19

출력 예

93 26 15 43 10 25 88 75 19 8
93 26 43 15 25 88 75 19 10 8
93 43 26 25 88 75 19 15 10 8
93 43 26 88 75 25 19 15 10 8
93 43 88 75 26 25 19 15 10 8
93 88 75 43 26 25 19 15 10 8
93 88 75 43 26 25 19 15 10 8
93 88 75 43 26 25 19 15 10 8
93 88 75 43 26 25 19 15 10 8

code

586

문제: 정수 두 개를 입력받고 계산식을 매크로 함수로 작성하여 두 수의 차를 제곱한 값과 합을 세제곱한 값을 각각 출력하는 프로그램을 작성하시오.
('^'는 연산자가 아니고 거듭제곱을 뜻하는 표시이므로 거듭제곱은 별도로 계산해야함)

입력 예

5 10

출력 예

(5 - 10) ^ 2 = 25
(5 + 10) ^ 3 = 3375

code

a,b=map(int,input().split())
print("(%d - %d) ^ 2 = %d"%(a,b,(a-b)**2))
print("(%d + %d) ^ 3 = %d"%(a,b,(a+b)**3))

175

문제: 정수 N을 입력받고 다시 N개의 정수를 입력받아 내림차순으로 정렬하여 출력하는 프로그램을 작성하시오.
(1 ≤ N ≤ 15, 입력과 출력, 정렬은 모두 함수를 이용할 것)

입력 예

5
12 35 1 48 9

출력 예

48 35 12 9 1

code

T=int(input())
a=list(map(int,input().split()))
a.sort(reverse=True)
print(*a)

176

문제: 두 개의 실수를 입력받아 각각의 제곱근을 구하고 두 제곱근 사이에 존재하는 정수의 개수를 출력하는 프로그램을 작성하시오.
단, 입력받는 두 실수는 양수이며 두 제곱근 사이라는 말은 두 제곱근을 포함한다.

입력 예

12.0 34.789

출력 예

2

code

import math

a=list(map(float,input().split()))
b=[(a[0])**(1/2),(a[1])**(1/2)]
if int(b[0])>int(b[1]):
    if b[1]-math.floor(b[1])==0:
        print(int(b[0])-int(b[1])+1)
    else:
        print(int(b[0])-int(b[1]))
elif int(b[0])<int(b[1]):
    if b[0]-math.floor(b[0])==0:        
        print(int(b[1])-int(b[0])+1)
    else:
        print(int(b[1])-int(b[0]))
else:
    print(0)

177

문제: 5개의 정수를 입력받아 각 정수의 절대값의 합을 출력하는 프로그램을 작성하시오.

입력 예

35 -20 10 0 55

출력 예

120

code

a=list(map(float,input().split()))
print("%d"%(abs(a[0])+abs(a[1])+abs(a[2])+abs(a[3])+abs(a[4])))

178

문제: 정수 n을 입력받아 2n의 값을 출력하는 프로그램을 작성하시오. (1 ≤ n ≤ 20)

입력 예

10

출력 예

1024

code

a=int(input())
print(2**a)

179

문제: 세 개의 실수를 입력받아 합계와 평균을 구하여 평균을 반올림한 정수를 출력하고, 다음은 입력받은 수를 각각 먼저 반올림한 후 합계와 평균을 구하여 평균을 반올림한 한 결과를 출력하는 프로그램을 작성하시오.

입력 예

153.74 34.59 109.5

출력 예

99
100

code

a=list(map(float,input().split()))
print(round(sum(a)/3))
print(round((round(a[0])+round(a[1])+round(a[2]))/3))

180

문제: 자료의 개수 7을 매크로 상수로 정의하여 자료의 개수만큼 정수를 입력받아 입력받은 순서대로 앞에서부터 마지막까지 가면서 바로 뒤의 숫자와 비교하여 크면 교환한다. 
이러한 작업을 세 번만 반복한 후 그 결과를 하나의 행에 공백으로 구분하여 출력하는 프로그램을 작성하시오.

입력 예

15 20 41 8 26 33 19

출력 예

8 15 20 19 26 33 41

code

def bubbleSort(arr):
    n = len(arr) 
    for i in range(3):
        for j in range(0, n - i - 1):
           if arr[j] > arr[j + 1]: 
                arr[j], arr[j + 1] = arr[j + 1], arr[j] 
arr = list(map(int, input().split()))

bubbleSort(arr)

for i in range(len(arr)):
    print("%d " %arr[i], end = "")

181

문제: 원주율을 3.141592로 매크로 상수로 정의하고 원의 넓이를 구하는 매크로 함수를 작성하여 반지름을 입력받아 원의 넓이를 출력하는 프로그램을 작성하시오. (소수 넷째자리에서 반올림)

입력 예

radius : 1.5

출력 예

area = 7.069

code

a=3.141592
b=float(input("radius : "))
print("area = %1.3f"%(a*b*b))
반응형

'Programming > JUNGOL : 정보올림피아드&알고리즘' 카테고리의 다른 글

[JUNGOL 문자열1]:593~188  (1) 2021.08.15
[JUNGOL 함수3]:587~232  (0) 2021.08.14
[JUNGOL 함수1]:571~174  (0) 2021.08.12
[JUNGOL 배열2]:564~169  (0) 2021.08.11
[JUNGOL 배열1]:555~159  (0) 2021.08.10