본문 바로가기

PS/BOJ : 단계별로 풀어보기

백준 [단계별로 풀어보기]: (4단계) "1차원 배열", python

반응형

백준 [단계별로 풀어보기]: (4단계) "1차원 배열", python

 

1. 문제번호 및 정답비율

4단계 1차원 배열 : 문제번호 및 정답 비율

 

2. 문제별 필요 지식 및 풀이 포인트

더보기

# 1. 10807 개수 세기
# 2. X보다 작은 수


# 3. 10818 최소, 최대

map()은 한 번 return 후 빈객체가 되므로, max(), min() 연달아 사용 불가


# 4. 2562 최댓값

TypeError: 'int' object is not callable
예약어(min, max, print 같은거)를 변수명으로 사용하였기 때문
예를 들어 min = min(A)라고 해주는 경우 오류 발생 : del min 해주기

 

4-1. 선형탐색 세 번((max(a) 2번, a.index() 1번)하는 비효율적 코드
a = [int(input()) for _ in range(9)]
print(max(a), a.index(max(a)) + 1)

4-2. 선형탐색 한 번 실시하는 미친코드
v_i = [(int(input()), i + 1) for i in range(9)] #[(input,1),(input,2),(input,3), ... ,(input,9)]
print(*max(v_i), sep="\n") #함수를 호출할 때 *가 사용되면' 이는 튜플 언패킹


# 5. 10810 공 넣기

basket[x] = k일때, 0 1 2 1 1로 출력되므로 런타임에러


# 6. 10813 공 바꾸기

# 7. 5597 과제 안 내신 분..?
# 8. 3052 나머지


# 9. 10811 바구니 뒤집기

다시풀어보기: 리스트슬라이싱

basket[i:j]면 i번째 i+1번째 값부터 적용되므로 주의할 것


# 10. 1546 평균


3. 문제별 풀이 코드

# 1. 10807 개수 세기
n = int(input())
num = list(map(int, input().split()))
v = int(input())

counter = 0
if len(num) == n:
    for i in range(n):
        if v == num[i]:
            counter += 1
        else:
            pass
print(counter)


# 2. X보다 작은 수
n, x = map(int, input().split())
a = list(map(int, input().split()))

result = []
if n == len(a):
    for i in range(n):
        if a[i] < x:
            result.append(a[i])
#print(result) #list[]형태

'''list[]의 값을 빼낼 때, for문을 사용'''
for i in result: #list[] to value
    print(i, end=' ')
    

# 3. 10818 최소, 최대
'''map()은 한 번 return 후 빈객체가 되므로, max(), min() 연달아 사용 불가
n = int(input())
num = map(int, input().split())
min(num)
max(num) #max() iterable argument is empty
'''
#내장함수 max(), min()
n = int(input())
num = list(map(int, input().split())) #항상 list(map())꼴로 사용
print(min(num), max(num), end=' ')

n = int(input())
num = list(map(int, input().split()))

#반복&조건문
n = int(input())
num = list(map(int, input().split()))
max = num[0]
min = num[0]
for i in range(n):
    if max < num[i]:
        max = num[i]
    if min > num[i]:
        min = num[i]
print(min, max)

#sort()정렬 후 처음,마지막 값 출력
n = int(input())
num = list(map(int, input().split()))
num.sort()
print(num[0], num[-1])


# 4. 2562 최댓값
'''TypeError: 'int' object is not callable
예약어(min, max, print 같은거)를 변수명으로 사용하였기 때문
예를 들어 min = min(A)라고 해주는 경우 오류 발생 : del min 해주기
'''
#내풀이
array = []
for i in range(9):
    n = int(input())
    array.append(n)
print(max(array), array.index(max(array))+1) #list.index() : 특정원소의 인덱스값

#선형탐색 세 번((max(a) 2번, a.index() 1번)하는 비효율적 코드
a = [int(input()) for _ in range(9)]
print(max(a), a.index(max(a)) + 1)

#선형탐색 한 번 실시하는 미친코드
v_i = [(int(input()), i + 1) for i in range(9)] #[(input,1),(input,2),(input,3), ... ,(input,9)]
print(*max(v_i), sep="\n") #함수를 호출할 때 *가 사용되면' 이는 튜플 언패킹


# 5. 10810 공 넣기
n, m = map(int, input().split())

basket = [0]*(n) #바구니 공 비우기

for _ in range(m):
    i,j,k = map(int, input().split())
    for x in range(i, j+1):
        basket[x-1] = k #basket[x] = k일때, 0 1 2 1 1로 출력되므로 런타임에러
        #print(basket)

for k in basket:
    print(k, end=' ')

#a = list(map(int, input().split()))
#for x in range(a[0], a[1]+1): basket[x-1] = a[2]로도 가능


# 6. 10813 공 바꾸기
n, m = map(int, input().split())
basket = []
for i in range(1,n+1):
    basket.append(i)
#print(basket) : [1,2,3,4,5]

for _ in range(m):
    i, j = map(int, input().split())
    basket[i-1], basket[j-1] = basket[j-1], basket[i-1]
    # basket[i], baeket[j] 시, 2번째 3번째가 교환됨

for i in basket:
    print(i, end=' ')
    

# 7. 5597 과제 안 내신 분..?
'''all_student = []
for i in range(1,31):
    all_student.append(i)

student = []
for i in range(28):
    submit = int(input())
    student.append(submit)
    if all_student[i] == student[i]:
        all_student.remove(all_student[i])
        
for i in all_student:
    print(i)'''

student = []
for i in range(1,31):
    student.append(i)

for i in range(28):
    submit = int(input())
    student.remove(submit)

for i in student:
    print(i)


# 8. 3052 나머지
nums = []
for i in range(10):
    num = int(input())
    nums.append(num%42)

nums.sort()
count = 1
for i in range(9):
    if nums[i] < nums[i+1]:
        count += 1

print(count)


# 9. 10811 바구니 뒤집기
'''다시풀어보기: 리스트슬라이싱'''
n, m = map(int, input().split())
basket = [] # [1,2,3,4,5]
for i in range(1,n+1):
    basket.append(i)

for _ in range(m):
    i, j = map(int, input().split())
    rev = basket[i-1:j] #basket[i:j]면 i번째 i+1번째 값부터 적용되므로 주의할 것
    rev.reverse() #rev.sort(reverse=True)쓰면, 1 4입력에서 4 3 2 1 5로 뜸
    basket[i-1:j] = rev
    #print(basket)

for i in basket:
    print(i, end=' ')


# 10. 1546 평균
n = int(input())
score = list(map(int, input().split()))

m = max(score)
total = [(i/m)*100 for i in score]

print(sum(total)/n)

 

반응형