Algorithm/백준

[Python] 백준 단계별로 풀어보기: 5단계 1차원 배열

nayoungs 2022. 2. 11. 18:11
728x90

 

<1단계:10818>

 

N개의 정수를 입력했을 때 , 최솟값과 최댓값을 구하는 프로그램을 작성해보자.

첫번째 줄에 정수의 개수 N을 입력하고, 두번째 줄에 N개의 정수를 공백으로 구분하여 입력한 뒤,

최솟값과 최댓값을 공백으로 구분해 출력하자.

 

코드:

N = int(input())
d = list(map(int,input().split()))
max = min = d[0]
for i in range(N):
    if d[i] > max:
        max = d[i]
    if d[i] < min:
        min = d[i]
print(min, max)
 

입력:

5
20 10 35 30 7
 

출력:

7 35
 

 

 


 

 

<2단계:2562>

 

9개의 서로 다른 자연수를 입력했을 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를

구하는 프로그램을 작성해보자.

예를 들어, 서로 다른 9개의 자연수

3, 29, 38, 12, 57, 74, 40, 85, 61

이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

 

첫번째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수를 입력하고,

첫번째 줄에 최댓값, 두번째 줄에 최댓값이 몇 번째 수인지를 출력하자.

 

이번에는 max()와 index(x)를 이용해보았다.

max()를 이용해 리스트의 최댓값을 출력하고,

index(x) 함수는 리스트에 x 값이 있으면 x의 index를 출력한다.

 

 

코드:

d = []
for i in range(9):
    d.append(int(input()))
print(max(d))
print(d.index(max(d))+1)
 

입력:

3
29
38
12
57
74
40
85
61
 

출력:

85
8
 

 

 


 

 

<3단계:2577>

 

세 개의 자연수 A,B,C를 입력했을 때 A*B*C를 계산한 결과에 0부터 9까지 각각의 숫자가

몇 번씩 쓰였는지를 구하는 프로그램을 작성해보자.

 

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고,

계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

 

첫번째 줄에 A,두번째 줄에 B, 세번째 줄에 C를 입력한다.

첫번째 줄에 A*B*C의 결과에 0이 몇번 쓰였는지 출력하고, 둘째 줄부터 열 번째 줄까지

A*B*C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례대로 한 줄에 하나씩 출력하자.

 

코드:

A = int(input())
B = int(input())
C = int(input())
d = list(str(A*B*C))
for i in range(10):
    print(d.count(str(i)))
 

 

입력:

150
266
427
 

출력:

3
1
0
2
0
0
0
2
0
0
 

 

 


 

<4단계:3052>

 

자연수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한 뒤, 서로 다른 값이 몇 개 있는 지 출력하는

프로그램을 작성해보자.

첫번째 줄부터 열번째 줄까지 숫자가 한 줄에 하나씩 입력되고,

42를 나누었을 때, 서로 다른 나머지가 몇개 있는지 출력하자.

 

set() 함수는 자료형의 중복을 제거해주는 역할을 한다.

 

코드:

d = []
for i in range(10):
    d.append(int(input())%42)
d = set(d)
print(len(d))
 

입력:

42
84
252
420
840
126
42
84
420
126
 

출력:

1
 

 

 


<5단계:1546>

 

N개의 과목의 점수가 입력될 때, 이 중 최댓값을 M이라하자.

모든 점수를 점수/M*100으로 고친 뒤에 평균을 구하는 프로그램을 작성해보자.

 

첫번째 줄에 시험 본 과목의 개수 N을 입력하고, 두번째 줄에 현재 성적을 공백으로 구분하여 입력하자.

 

코드:

N = int(input())
d = list(map(int, input().split()))
M = max(d)
for i in range(N):
        d[i] = d[i] / M * 100
average = sum(d) / N
print("%.2f"%average)
 

입력:

30 
40 80 60
 

출력:

75.00
 

 

 


 

<6단계:8958>

 

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.

문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.

 

예를 들어, "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성해보자.

 

첫번째 줄에 테스트 케이스의 개수를 입력하고, 각 테스트 케이스는 한줄로 이루어져있다.

각 테스트 케이스마다 점수를 출력해보자.

 

코드:

n = int(input())
for i in range(n):
    d = input()
    count = 1
    sum = 0
    for i in range(len(d)):
        if d[i] == 'O':
            sum += count
            count += 1
        else:
            count = 1
    print(sum)
 

 

입력:

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
 

출력:

10
9
7
55
30
 

 

 


 

<7단계:4344>

 

첫번째 줄에 테스트 케이스의 개수 C를 입력하고, 두번째 줄 부터 각 테스트 케이스마다 학상의 수 N이

첫 수로 주어지고, 이어서 N명의 점수가 입력된다.

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

 

코드:

C = int(input())
for i in range(C):
    d = list(map(int,input().split()))
    average = sum(d[1:])/d[0]
    count = 0
    for score in d[1:]:
        if score > average:
            count += 1
    print("%.3f"%(count/d[0]*100)+"%")
 

 

 

입력:

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
 

출력:

40.000%
57.143%
33.333%
66.667%
55.556%
 

 

 


 

지금까지 백준 단계별로 풀어보기 5단계를 풀어보았다.

 

출처: https://www.acmicpc.net/step

 

 

728x90