본문 바로가기
IT/알고리즘

[알고리즘/파이썬] 백준 10807번 개수 세기, 10810번 공 넣기, 10813번 공 바꾸기

by Ko2 2023. 6. 15.

백준 사이트의 단계별로 풀어보기 (단계별로 풀어보기 (acmicpc.net)) 네번째인 1차원 배열 문제들을 풀어볼 시간입니다.

이번 단계에서는 list 를 다루면서 입력값으로 list 생성, list 값 수정, 숫자 list 를 문자열로 변환하는 방법등을 익힐 수 있습니다.


반응형

10807번: 개수 세기 (acmicpc.net)

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

C나 Java 였다면 N개의 숫자 입력을 for 문을 사용해서 하나씩 받아야 할 수도 있었겠지만,

파이썬의 경우 list() 를 사용해서 한번에 N개 의 숫자 배열을 만들 수 있습니다.

그리고 해당 list 에서 v 가 몇개인지도 list 의 count() 함수를 사용해서 바로 찾을 수 있습니다.

n = int(input())
num_list = list(map(int, input().split())) # N개 숫자 배열 생성
v = int(input())
print(num_list.count(v)) # num_list 배열에서 v 의 개수

10810번: 공 넣기 (acmicpc.net)

 

10810번: 공 넣기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이

www.acmicpc.net

 

이 문제에서는 처음에 0 의 값을 가지는 N 개짜리 리스트를 먼저 생성합니다.

그리고 slice 를 활용해서 특정 범위의 값을 같은 값으로 변경합니다.

출력 시에는 먼저 숫자 리스트를 문자열 리스트로 변경하고, 각 값을 스페이스바 간격을 두고 join 시킵니다.

n, m = map(int, input().split())
basket = [0] * n # N개의 바구니 생성 (0 ~ n-1)
for a in range(m):
    i, j, k = map(int, input().split())
    basket[(i-1):j] = [k] * (j-i+1) # (i-1) ~ j 번 바구니를 k 로 변경
print(' '.join(map(str, basket))) # basket 을 str 으로 변환 후 ' '(스페이스바) 를 사이에 두며 join 하기

10813번: 공 바꾸기 (acmicpc.net)

 

10813번: 공 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이

www.acmicpc.net

이번 문제에서는 첫 리스트 생성할 때 0 을 가지는 값으로 생성 하는 것이 아닌 list(range()) 를 사용해서 숫자 범위 값을 가지는 리스트를 생성하였습니다.

그리고 swap 의 경우 C, Java 보다 훨씬 편하게 a, b = b, a 를 사용할 수 있습니다.

n, m = map(int, input().split())
basket = list(range(n+1)) # [0, 1, 2, ... , n] 리스트 생성

for a in range(m):
    i, j = map(int, input().split())
    basket[i], basket[j] = basket[j], basket[i] # i번 바구니와 j번 바구니 swap

print(' '.join(map(str, basket[1:])))
반응형

댓글