[알고리즘] 백준 | 공 넣기
공 넣기
답:
from sys import stdin
input = stdin.readline
N, M = map(int, input().split())
bucket = ["0"] * N
for _ in range(M):
i, j, k = map(int, input().split())
for num in range(i-1, j):
bucket[num] = f"{k}"
print(" ".join(bucket))
from sys import stdin
input = stdin.readline
N, M = map(int, input().split())
bucket = [0] * N
for _ in range(M):
i, j, k = map(int, input().split())
for num in range(i-1, j):
bucket[num] = k
print(" ".join(map(str, bucket)))
문제 분석 및 해석
각각의 바구니에는 번호가 있다 1번 ~ N번
1번부터 N번까지 번호가 적혀있는 공을 가지고 있다
바구니에는 공이 들어있지 않으며, 각 바구니에는 공을 1개만 넣을 수 있다
M번 공을 넣으려고 한다 (횟수)
도현이는 한 번 공을 넣을 때 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다
만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고 새로운 공을 넣는다. 공을 넣을 바구니는 연속된다.
-----
N개의 바구니, M개의 줄 (공을 넣을 횟수)
M개의 줄에 걸쳐서 공을 넣는 방법 : 각 방법은 세 정수 i j k, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다
바구니에 공이 있으면 공을 빼고 넣기
입력 :
5 4
1 2 3
3 4 4
1 4 1
2 2 2
출력 :
1 2 1 1 0
공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력
>> 풀이생각
배열, 1~N... 0번을 넣던지, 빼고 전체 숫자를 -1로 생각하고 풀기
for 문으로 해당 input을 그때그때 받으면서 공을 바구니에 넣어주자
풀이 중 오류
1) 기껏 잘 구해놓고 출력 타입을 제대로 확인 안하고 제출함 ..
써놓으면 부끄러운 만큼 앞으론 안하겠지
print(bucket)
## 조건 1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.
입출력을 잘 읽자...
2) TypeError발생
print(" ".join(bucket))
print(" ".join(bucket))
^^^^^^^^^^^^^^^^
TypeError: sequence item 0: expected str instance, int found
= str값을 기대했지만, int 값이어서 join할 수 없었다
배열에 든 값은 숫자기 때문에 문제가 생김
해결방법 1. #성공
print문에서 map으로 str값으로 다시 바꾸어 결과내주기
for _ in range(M):
i, j, k = map(int, input().split())
...
print(" ".join(map(str, bucket)))
이중으로 map을 사용하는것이어서 별로 좋은 코드는 아니다
해결방법 2. #오류
처음 문자열을 받을때 int값으로 바꾸지 않고 변수에 받기
range문에 문자열을 넣기때문에 문제가 생긴다
해결방법 3. #성공
map함수로 int로 받되 k를 배열에 넣을 때 f string으로 문자열로 변환해 넣어줬다.
bucket = ["0"] * N ##여기도 변경해주어야한다. 일반 숫자 0인경우 런타임에러 발생
for _ in range(M):
i, j, k = map(int, input().split())
for num in range(i-1, j):
bucket[num] = f"{k}"
print(" ".join(bucket))
해결방법 4. #성공
print(*bucket)
리뷰.
문제 설명이 복잡하게 되어있지만 차근차근 생각하면 그리 어려운 문제는 아니었다
출력 값을 잘 확인하고 제출하자!