반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[파이썬/Python] 백준 3733번 Shares 본문

Solved.ac - Python/Bronze V

[파이썬/Python] 백준 3733번 Shares

ImJay 2022. 9. 19. 16:07
반응형

[파이썬/Python] 백준 3733번 Shares

www.acmicpc.net/problem/3733

 

3733번: Shares

A group of N persons and the ACM Chief Judge share equally a number of S shares (not necessary all of them). Let x be the number of shares aquired by each person (x must be an integer). The problem is to compute the maximum value of x. Write a program that

www.acmicpc.net


문제

A group of N persons and the ACM Chief Judge share equally a number of S shares (not necessary all of them). Let x be the number of shares aquired by each person (x must be an integer). The problem is to compute the maximum value of x.

Write a program that reads pairs of integer numbers from an input text file. Each pair contains the values of 1 ≤ N ≤ 10000 and 1 ≤ S ≤ 109 in that order. The input data are separated freely by white spaces, are correct, and terminate with an end of file. For each pair of numbers the program computes the maximum value of x and prints that value on the standard output from the beginning of a line, as shown in the example below.

코드

result = []

while True:
    try:
        n, s = map(int, input().split())
        result.append(s // (n+1))
    except:
        for x in result:
            print(x)
        break

풀이

1. x 값을 받아줄 리스트 result를 선언합니다.

result = []

 

2. 입력 받은 n, s 를 통해 x 의 최대값을 계산하여 출력합니다.

while True:
    try:
        n, s = map(int, input().split())
        result.append(s // (n+1))
    except:
        for x in result:
            print(x)
        break

 

2-1. 먼저, 문제가 요구하는 값을 계산해봅니다.

n명의 사람과 ACM 수석 심판이 주식 S개를 공평하게 나눠 갖도록 최대값 x 를 구해야 합니다.

(A group of N persons and the ACM Chief Judge share equally a number of S shares ... The problem is to compute the maximum value of x.)

s // (n+1)

주식 S 개를 n + 1(n 명의 사람 + ACM 수석 심판)명이 공평하게 나눠 가져야 하므로, S를 n+1로 나눈 정수 몫이 우리가 원하는 최대값 x가 됩니다.

// 연산자는 정수 몫을 반환해줍니다. 

 

 

우리는 이 최대값 x를 result 리스트에 저장해야 하므로 append 메소드를 사용해줍니다.

result.append(s // (n+1))

 

2-2. 이제 문제의 입출력 조건을 확인합니다.

정수 쌍을 입력 받아야 하며(Write a program that reads pairs of integer numbers from an input text file),

공백을 통해 구분되어야 합니다(The input data are separated freely by white spaces).

n, s = map(int, input().split())
result.append(s // (n+1))

 

입력 데이터는 파일의 끝으로 구분되어야 합니다(terminate with an end of file).

즉 n과 s를 여러번 입력 받을 수 있고 각각의 n, s의 결과 x가 출력되어야 합니다.

while True:
    try:
        [...]
    except:
        [...]

이 때, try except 구문을 사용합니다. 이 구문은 파이썬에서 예외처리에 주로 사용합니다.

try에 작성한 명령어를 통해 내가 원하는 대로 함수가 동작하는지 확인하고, 만약 예외가 발생한다면 except에 작성한 명령어를 통해 확인할 수 있습니다.

 

while True:
    try:
        n, s = map(int, input().split())
        result.append(s // (n+1))
    except:
        for x in result:
            print(x)
        break

while True, try를 통해 무한루프로 사용자가 원하는 만큼 입력을 받습니다.

사용자가 입력을 마치면(아무 것도 입력하지 않았을 경우) except 문을 통해 빠져나오도록 합니다.

except 문에는 결과 값을 출력하고, break 문을 통해 루프를 탈출합니다.

 

느낀 점

입출력 조건의 중요성에 대해 깨달았습니다.

 

반응형
Comments