본문 바로가기
ⓒⓞⓓⓘⓝⓖⓣⓔⓢⓣ/ⓟⓨⓣⓗⓞⓝ

[python] 단계별로 풀어보기 - 5단계

by heaven00 2021. 4. 26.
728x90

 

 

 

 

 

다른 언어로 풀라면 금방 풀 수 있을 것 같은데 생소한 파이썬이라 오래걸렸다.

그리고 아직 제대로 이해도 못한 것 같다...

 

그런데 풀면서 느낀건 파이썬은 기본으로 제공해주는 함수가 많은 것 같다

min, max함수, set함수는 진짜 편한 것 같다!!!

 

나중에 꼭 파이썬을 능숙하게 쓸줄 아는 사람이 되고싶다

 

 


 

 

5-1) 백준 10818번: 최소, 최대

 

a = int(input())		
b = list(map(int, input().split()))		//정수를 공백으로 구분해서 입력받아, list에 넣어주기
print(min(b),max(b))				//리스트의 수 중에 min값, max값 출력

 

 

 

 

 

 

 

5-2) 백준 2562번: 최댓값

 

a= []
for i in range(9):			//9번 반복문 돌며 값 입력받아, 배열에 넣어주기
    a.append(int(input()))

print(max(a))				//최대값 출력
print(a.index(max(a))+1)		//최대값이 있는 인덱스 + 1 출력(인덱스는 0부터 시작하므로)

 

 

 

 

 

 

 

5-3) 백준 2577번: 숫자의 개수

 

a = int(input())
b = int(input())
c = int(input())

result = list(str(a * b * c))		//a,b,c 입력받아 곱해주기
for i in range(10):			//10만큼 반복하며 각각에 해당되는 수를 str형으로 비교해서 count한 값 출력
    print(result.count(str(i)))		

 

안에 들어간 문자의 수를 세기 위해서는 int형을 str형으로 변경해 준 뒤, 리스트에 넣어준다

그 뒤, count 함수를 사용하여 탐색을 하여 각각의 문자열이 몇 번 쓰였는지 계산하여 출력해 준다.

 

 

 

 

 

 

 

5-4) 백준 3052번: 나머지

 

arr = []
for i in range(10):	//입력받은 값을 42로 나눈 나머지 배열에 넣어주기
    a = int(input())
    arr.append(a%42)

arr = set(arr)		//set함수 사용하여 배열 중복 제거
print(len(arr))		//배열의 길이 출력

 

set 함수를 사용하여 중복을 삭제해 주고 len 함수를 사용하여 리스트의 길이를 계산한 뒤, 반환해 준다.

 

 

 

 

 

 

5-5) 백준 1546번: 평균

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

M = max(b)			//입력받은 수 중에 최대값을 구한다

for i in range(a):
    b[i] = b[i]/M*100		//문제에서 주어진대로, 값을 새롭게 만들어 넣어준다
    avg = sum(b)/a		//새로 만든 값들을 토대로 평균을 낸다
print(avg)

 

 

 

 

 

 

5-6) 백준 8958번: OX퀴즈

 

n = int(input())

for i in range(n):
    num = input()
    score = 0
    cnt = 0
    
    for j in range(len(num)):	
        if num[j] == 'O':		
            cnt += 1
            score += cnt
        elif num[j] == 'X':
            score += 0
            cnt = 0
            
    print(score)

 

cnt와 score을 따로 둔 이유는, x가 온 뒤에는 O의 점수가 0으로 다시 초기화되기 때문이다. 이 점을 알면 코드 풀이가 쉬워진다.

 

 

 

 

 

 

5-7) 백준 4344번: 평균은 넘겠지

 

a = int(input())

for i in range(a):
    num = list(map(int, input().split()))
    avg = sum(num[1:])/num[0] 
    cnt = 0
    for score in num[1:]:
        if score > avg:
            cnt += 1  
    rate = cnt/num[0] *100
    print(f'{rate:.3f}%')

 

첫 수는 학생의 수이므로 그 수를 제외한 뒤의 수 부터 합을 구하고, 그 값을 첫 수로 나누어주면, 해당 케이스의 평균이 나온다.
평균을 넘는 학생들의 비율을 반올림해야하므로, 평균이 넘는 학생수를 cnt에 저장해주고, 소수점 셋째 자리까지 출력하는 비율을 구해준다.
 

728x90

댓글