노베이스 알고리즘 공부 #5. 백준 10810 공 넣기 - Python

Anny·2024년 3월 18일
0

https://www.acmicpc.net/problem/10810

1.문제

-- 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다.
-- (조건1) 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.
--도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다.
-- (조건2) 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.
--공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.

입력
-- 둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다.
-- 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다.
-- 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다.

2. 풀이

2-1. 접근

알고리즘 문제를 풀다보면 요구하는게 간결해서 문제에 대한 이해가 빠른게 있고, 조건이 너무 많아서 문제를 이해하는데 한참 걸리는 경우가 있음. 내 경우는 이번게 후자였다,,,

처음에 공을 넣는다만 보고 엥 1번에 4개 아님? 이러고 있었는데 조건2가 초기화의 조건을 주기 때문에 당연히 아니었음

예제 입력 둘째줄부터 보면,
1번부터 2번까지의 바구니에 공을 3번 넣는다.
3 3 0 0 0

3번부터 4번까지의 바구니에 공을 4번 넣는다.
3 3 4 4 0

1번부터 4번까지 공을 1번 넣는다.
1 1 1 1 0

2번부터 2번까지 2개 넣는다.
1 2 1 1 0

,,,하지만 내가 여전히 문제를 잘못 이해하고 있었다!

공을 3번 넣는다는게 아니라 3번 공을 넣는다는 뜻 이었음.

예제 입력 둘째줄부터 보면,
1번부터 2번까지의 바구니에 3번 공을 넣는다.
3 3 0 0 0

3번부터 4번까지의 바구니에 4번 공을 넣는다.
3 3 4 4 0

1번부터 4번까지 공을 1번 공을 넣는다.
1 1 1 1 0

2번부터 2번까지 2번 공을 넣는다.
1 2 1 1 0

공을 6번 넣는다 vs 6번 공을 넣는다 오늘도 내 독해력이 한탄스러울 뿐임,,

1트

n, m = map(int, input().split())
basket = [0] * n

for a in range(m):
    a, b, c = map(int, input().split)
    for a in range(a, b):
        basket[a] = c
        
print(" ". join(basket))

컴파일 에러! 그래서 구글링 진행

2-2. List 주소 & 2트

List A의 Array가 [ 1, 2, 3]라고 치면
A[0] = 1, A[1] =2, A[2] = 3였던 거시다,,
그래서 basket[a - 1] 장착

n, m = map(int, input().split())
basket = [0] * n

for _in range(m):
    a, b, c = map(int, input().split)
    for a in range(a, b):
        basket[a-1] = c
        
print(" ". join(basket))

하지만 또파일 에러,,

2-3. Range()함수 & 3트

1부터 10까지의 값을 출력하고 싶다면?

for i in rnage(1, 10):
print(i)

위의 식은 1부터 9까지의 값이 출력됨
때문에 10에 1을 더해 11로 만들어줄 필요가 있음,,

마찬가지로!

n, m = map(int, input().split())
basket = [0] * n

for _in range(m):
    a, b, c = map(int, input().split)
    for a in range(a, b+1):
        basket[a-1] = c
        
print(" ". join(basket))

??????왜 오륜데????

2-4. Join함수

Join 함수는 문자형이 저장된 리스트에만 사용할 수 있는것이었다.
때문에 map 함수를 사용해 str형으로 변형해줄 필요가 있었음

n, m = map(int, input().split())
basket = [0]*n

for _ in range(m):
    a, b, c = map(int, input().split)
    for a in range(a, b+1):
        basket[a-1] = c

for _ in range(n):
	basket = map(str,basket)
	print(" ".join(basket))

이래도 오류가 뜬다 왠지 아는 사람ㅠㅠㅠㅠㅠ
--> 바보였다 split() 괄호를 넣지 않는 오타로 인한 발생

n, m = map(int, input().split())
basket = [0]*n

for _ in range(m):
    a, b, c = map(int, input().split())
    for a in range(a, b+1):
        basket[a-1] = c

for _ in range(n):
	basket = map(str,basket)
	print(" ".join(basket))

로 정답..

profile
Newbie

0개의 댓글