Algorithm/백준 단계별로 풀어보기

[백준 알고리즘/Python]1차원 배열

베이비코더 2021. 9. 3. 21:34
반응형
1단계 10818번 최소, 최대
n = int(input())
listA = list(map(int, input().split()))
print(min(listA), max(listA))

 

2단계 2562번 최댓값
listA = list()
for i in range(9):
    listA.append(int(input()))

print(max(listA))
print(listA.index(max(listA))+1)
listA = [int(input()) for _ in range(9)]
print(max(listA))
print(listA.index(max(listA))+1)

두 가지 방법으로 풀어보았다.

첫 번재 방법은 for문을 이용하여 listA를 만들었고,

두 번째 방법은 리스트 컴프리헨션(Comprehension)을 사용했다.

 

리스트 컴프리헨션은 파이썬의 리스트가 갖는 특별한 기능인데, 리스트를 for문이나 if문을 사용하여 생성하는 것이다.

 

int(input())을 9번 반복하여 list를 생성한 것인데, 보통 for문을 사용할 때 i나 j와 같은 반복하는 수를 담는 임시적인 변수를 사용한다. 이러한 변수가 사용하지 않는 경우에는 _(언더바)를 사용하여 생략할 수 있다.

출처 파이썬 코딩 도장

위 그림이 리스트 컴프리헨션을 쉽게 보여주는 거 같다.

 

JAVA같은 경우는 아마 첫 번째와 같은 방법으로 밖에 리스트를 정의할 수 없었을텐데 파이썬이 갖고 있는 편리한 기능 중 하나

 

3단계 2577번 숫자의 개수
A = int(input())
B = int(input())
C = int(input())

result = str(A * B * C)
resultList = [0] * 10

for i in result:
    resultList[int(i)] += 1

for i in resultList:
    print(i)

# count()

문자열에서 특정 문자열이 몇 개 있는지 세어주는 함수이다.

count('특정 문자열', 1, 10) 와 같이 사용하면 문자열의 1번째 위치부터 10번째 위치 사이에서 특정 문자열을 찾는 범위를 갖게 된다.

A = int(input())
B = int(input())
C = int(input())

result = str(A * B * C)

for i in range(10):
    print(result.count(str(i)))

 

4단계 3052번 나머지
import sys

divList = list()

for i in range(10):
    divList.append(int(sys.stdin.readline().rstrip()) % 42)

print(len(set(divList)))

# set()

수학에서 집합과 비슷해서 교집합, 합집합, 차집합 등등의 수학 연산을 계산하고, 중복을 제거해준다는 특징을 갖고 있다.

 

divList에 입력한 수를 45로 나눈 나머지를 담고, set()을 이용하여 중복을 지우고, len()을 이용하여 divList의 원소의 개수를 출력한다.

 

5단계 1546번 평균
n = int(input())

scoreList = list(map(int, input().split()))
m = max(scoreList)
sum = 0

for i in range(n):
    scoreList[i] = scoreList[i]/m*100
    sum += scoreList[i]

print(sum / n)

 

6단계 8958번 OX퀴즈
test_case = int(input())

for i in range(test_case):
    oxList = list(input())
    score = 0
    total_score = 0
    for i in oxList:
        if i == 'O':
            score += 1
            total_score += score
        else:
            score = 0
    print(total_score)

 

7단계 4344번 평균은 넘겠지
C = int(input())

for i in range(C):
    scoreList = list(map(int, input().split()))
    scoreAvg = sum(scoreList[1:]) / scoreList[0]
    student = 0

    for j in scoreList[1:]:
        if j > scoreAvg:
            student += 1
    studentAvg = student/scoreList[0] * 100
    print(format(studentAvg, '.3f')+'%')

 

# format()

반올림을 해주는 round 함수는 자리수를 표현하지 못 했기 때문에 format 함수를 이용하여 소수점 밑 세 자리수를 표현해 주었다.

 

반응형