문제:

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

입력:

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

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1<=N<=1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.


출력:

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

풀이 방법:

입력값들을 받는 함수 student와 그 입력 값을 받아서 비율을 계산해주는 blue라는 함수 두 개로 구성되어 있다. 입력이 학생의 수 이후에 점수들이 나타나는 형식으로 이루어져 있으므로 input().split()을 통해 리스트로 받아준 후 정수값과 리스트값으로 나누었다.
이를 blue에 넣어서 평균을 구하고 평균을 넘는 학생들의 수를 구하였다. 출력을 소수점 셋째 자리까지 출력해야 하는데 이는 round함수를 구하면 얻을 수 있다. round( value, number)로 구성되어 있는데 value를 소수점 number째 자리까지 반올림하여 출력해주는 함수이다. 따라서 round(value,3)과 같이 구하면 얻을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def blue(n,a):
    sumscore=0
    person=0
    for i in range(n):
        sumscore += int(a[i])
        average=sumscore/n
    for i in range(n):
        if int(a[i]) > average:
            person +=1
        else:
            pass
    print("%.3f%%" % round(person/n*100,3))
def student(c):
    for i in range(c):
        m=input().split()
        n=int(m[0])
        a=m[1:]
        blue(n,a)
c=input()
c=int(c)
student(c)
cs


'Algorithm > Python' 카테고리의 다른 글

[BOJ]1065. 한수  (0) 2019.04.03
[BOJ]1110. 더하기 사이클  (0) 2019.04.02
[BOJ]2839.설탕 배달  (1) 2019.03.31
[BOJ]11718.그대로 출력하기  (0) 2019.03.30
[Programmers]Lv 2. 라면공장  (0) 2019.03.29

문제:

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

주의 사항:

정확하게 만들 수 없다면 -1을 출력한다.

풀이 방법:

while문을 사용해서 무게가 3인 봉지를 하나씩 늘리면서 필요한 무게가 5인 봉지의 수를 구하고, 다시 한 번 무게가 5인 봉지를 하나씩 늘리면서, 필요한 무게가 3인 봉지의 개수를 찾는다. 정확히 N킬로그램이 되는 경우만 배열에 넣는다. while문이 끝나고 배열의 길이가 1보다 크다면 그 중 가장 작은 값을 반환하고, 그렇지 않으면 -1을 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def sugar(n):
    x=1
    count=[]
    while n//(3*x) > 0:
        if (n-3*x)%5 == 0:
            y= (n-3*x)//5
            count.append(x+y)
        x+=1
    y=1
    while n//(5*y) > 0:
        if (n-5*y)%3 == 0:
            x= (n-5*y)//3
            count.append(x+y)
        y+=1    
    if len(count)==0:
        return -1
    else:
        return min(count)
n=int(input())
print(sugar(n))
cs


'Algorithm > Python' 카테고리의 다른 글

[BOJ]1110. 더하기 사이클  (0) 2019.04.02
[BOJ]4344. 평균은 넘겠지  (0) 2019.04.01
[BOJ]11718.그대로 출력하기  (0) 2019.03.30
[Programmers]Lv 2. 라면공장  (0) 2019.03.29
[Programmers]Lv 2. 영어 끝말잇기  (0) 2019.03.28

문제:

입력받은 대로 출력하는 프로그램을 작성하시오.

 

입력:

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다.

각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

 

풀이 방법:

문제만 보면 받은 그대로 print를 하면 될 것 같지만 정답 비율이 25% 정도인 것을 보면 풀기 쉽지 않다는 것을 알 수 있다. 대다수의 사람들이 통과를 하지 못하는 점은 주어지는 예제가 언제 끝나는지 모른다는 점이다. 따라서 이 점을 예외처리를 사용해서 해결한다면 문제를 통과 할 수 있다.

 

while True:
    try:
        line=input()
        print(line)
    except:
        break

 

 

'Algorithm > Python' 카테고리의 다른 글

[BOJ]4344. 평균은 넘겠지  (0) 2019.04.01
[BOJ]2839.설탕 배달  (1) 2019.03.31
[Programmers]Lv 2. 라면공장  (0) 2019.03.29
[Programmers]Lv 2. 영어 끝말잇기  (0) 2019.03.28
[Programmers]Lv 2. 점프와 순간이동  (0) 2019.03.27

+ Recent posts