백준/백준 파이썬

백준 파이썬 Today I Learn 2023.05.02

군청레프 2023. 5. 3. 17:45
728x90

5/ 02 파이썬 공부
1. 백준 4344 평균은 넘겠지
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 
이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

>>>코드
n = int(input())
for i in range(n):
    a = list(map(float, input().split()))
    ave = float((sum(a)-a[0])/a[0])
    p = float(0)
    m = int(a[0])
    for j in range(m):
        if a[j+1] > ave:
            p+=1
    r=round(p/a[0]*100, 3)
    print('%.3f%%' %(r))

>>>코드 설명
테스트 케이스 수n 입력받기
n만큼 반복하여 학생수와 점수 입력받고 리스트에 저장하기
평균 계산하여 ave 변수에 저장
점수 하나씩 평균점수와 비교하고, 평균보다 점수가 높으면 변수 p에 카운트 하기
소수점 3번째 자리까지 반올림 후(round)
소수점 3번쨰 자리까지 출력하기

1) round(float, a)
float 실수를 소수점 아래 a번째 자리까지 반올림하기

2) print('%.nf'%(a))
소수점 n번째 자리까지 출력

3) %%: % 기호 출력하기

2. 백준 27323 직사각형
세로 길이가 A cm, 가로 길이가 B cm인 직사각형의 넓이를 cm2 단위로 구하고, 단위 (cm2)를 생략하여 출력한다.

>>> 코드
a = int(input())
b = int(input())
print(a*b)

이런 문제가 왜 여기에...?

3. 백준 2750 수 정렬하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 
이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

>>>코드
n = int(input())
l =[]
for i in range(n):
    l.append(int(input()))
l = sorted(l)
for i in range(n):
    print(l[i])

1) sorted(리스트): 리스트를 오름차순으로 정리

4. 백준 10872 팩토리얼 & 백준 27433 팩토리얼2 (동일한 문제임)
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
첫째 줄에 N!을 출력한다.

>>> 코드
n = int(input())
k = 1
for i in range(n):
    k = k*(i+1)
print(k)

1) for i in range(n): n의 횟수만큼 반복 실행, 각 반복마다 i에는 0부터 n-1까지 대입

5. 백준 2741 N 찍기
자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

>>> 코드
n = int(input())
for i in range(n):
    print(i+1)

단순한 반복문 이용 출력하기 코드

6. 백준 2558 A+B-2
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
첫째 줄에 A, 둘째 줄에 B가 주어진다. (0 < A, B < 10)
첫째 줄에 A+B를 출력한다.

>>> 코드
a = int(input())
b = int(input())
print(a+b)

단순 입출력 코드

7. 백준 10757 큰 수 A+B
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
첫째 줄에 A와 B가 주어진다. (0 < A,B < 10**10000)
첫째 줄에 A+B를 출력한다.

>>>코드
a, b = map(int, input().split())
print(a+b)

1) a, b = map(int, input().split())
a, b 변수에 공백 구분으로 입력된 수를 정수형으로 저장하기

8. 백준 2420 사파리월드
첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)
첫째 줄에 두 유명도의 차이 (|N-M|)을 출력한다.

>>>코드
N, M = map(int, input().split())
print(abs(N-M))

1) abs(a): a의 절대값 반환

9. 백준 2475 검증수
첫째 줄에 고유번호의 처음 5자리의 숫자들이 빈칸을 사이에 두고 하나씩 주어진다.
검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다.
첫째 줄에 검증수를 출력한다.

>>>코드
a = list(map(int, input().split()))
r = (a[0]**2+a[1]**2+a[2]**2+a[3]**2+a[4]**2)%10
print(r)

1) a**b: a를 b번 거듭제곱

2) a%b: a를 b로 나누어서 나온 나머지

10. 백준 1271 엄청난 부자
첫째 줄에는 최백준 조교가 가진 돈 n과 돈을 받으러 온 생명체의 수 m이 주어진다. 
(1 ≤ m ≤ n ≤ 101000, m과 n은 10진수 정수)
‘모든 지적 생명체는 동등하다’라는 규칙에 입각해서 돈을 똑같이 분배하고자 한다.
첫째 줄에 생명체 하나에게 돌아가는 돈의 양을 출력한다. 
그리고 두 번째 줄에는 1원씩 분배할 수 없는 남는 돈을 출력한다.

>>>코드
a, b = map(int, input().split())
print(a//b)
print(a%b)

1) a//b: a를 b로 나누어서 나온 몫

11. 백준 27959 초코바
밤고는 100원 동전을 N개 갖고 있고, 그 돈으로 가격이 M원인 초코바를 사 먹으려고 한다. 
밤고는 갖고 있는 돈으로 초코바를 사 먹을 수 있는지 알고 싶어 한다.
밤고가 가진 돈이 초코바의 가격 이상이면 밤고는 초코바를 살 수 있다. 
밤고가 가진 돈이 초코바를 사기에 충분한지 판단해주자.
첫 번째 줄에 두 정수 N과 M이 공백을 사이에 두고 주어진다.
밤고가 초코바를 살 수 있으면 Yes를, 없으면 No를 출력한다.

>>>코드
N,M = map(int, input().split())
if N*100>=M:
    print('Yes')
else:
    print('No')

단순한 if else 조건문

12. 백준 4101 크냐?
두 양의 정수가 주어졌을 때, 첫 번째 수가 두 번째 수보다 큰지 구하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다. 
각 테스트 케이스는 한 줄로 이루어져 있으며, 두 정수가 주어진다. 
두 수는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 두 개 주어진다.
각 테스트 케이스마다, 첫 번째 수가 두 번째 수보다 크면 Yes를, 아니면 No를 한 줄에 하나씩 출력한다.

>>>코드
while True:
    a, b = map(int, input().split())
    if a == 0 & b == 0:
        break
    if a>b:
        print('Yes')
    else:
        print('No')

1) while True: break 전까지 무한 반복

2) if break 문: 조건문을 만족했을 시 반복문(while문 또는 for문) 정지 

13. 백준 2744 대소문자 바꾸기
영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 
대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오.
첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.
첫째 줄에 입력으로 주어진 단어에서 대문자는 소문자로, 소문자는 대문자로 바꾼 단어를 출력한다.

>>>코드
a = list(input())
for i in range(len(a)):
    if ord(a[i])<91:
        print(a[i].lower(), end='')
    else:
        print(a[i].upper(), end='')

1) len(문자열): 문자열의 길이 반환

2) ord(문자): 문자에 해당하는 아스키 코드 숫자 반환

3) 문자열 대소문자 변환
문자열.upper(): 문자열을 대문자로 변환
문자열.lower(): 문자열을 소문자로 변환

728x90