문제
개 이상 연속으로 같은 숫자가 적혀있는 폭탄들은 터지게 되고, 중력에 의해 위에 있던 폭탄들은 밑으로 떨어지게 됩니다. 개 이상 연속한 폭탄은 부분만 터져서는 안되고 전부 다 터져야 합니다.
만약 M개 이상인 폭탄들의 쌍이 여러 개라면 동시에 터지게 됩니다.
입력
4 2
1
2
2
3
출력
0
해결
시작 인덱스와 끝 인덱스를 찾아간다.
get_end_idx 함수를 통해 배열을 돌며 현재 값(시작 인덱스) 와 다르다면, 끝 인덱스 리턴.
while문으로 loop
끝 인덱스-시작인덱스+1 가 M 이상 이면 :
폭발 가능 -> 폭발 ( 배열에서 제거)
아니면:
폭발 불가능 -> 끝 인덱스 다음 인덱스부터 탐색
코드
n, m = tuple(map(int, input().split()))
numbers = [
int(input())
for _ in range(n)
]
#끝 인덱스 찾기
def get_end_idx(start_idx,curr_num):
for end_idx in range(start_idx+1,len(numbers)):
if numbers[end_idx]!= curr_num:
return end_idx-1
return len(numbers)-1 #배열 맨 끝까지 동일
while True:
exploded = False
curr_idx=0
while curr_idx<len(numbers):
end_idx=get_end_idx(curr_idx,numbers[curr_idx])
#연속한 숫자 개수 m 이상
if end_idx - curr_idx +1 >= m :
del numbers[curr_idx:end_idx+1] #터진 구간 배열에서 제거
exploded=True
else:
curr_idx=end_idx+1 # 폭탄 터질 수 없는 경우(m이하) end_idx의 다음 인덱스부터 탐색
#배열 한바퀴 돌며 폭탄이 터진 경우가 없으면 break
if exploded==False:
break
print(len(numbers))
for n in numbers:
print(n)'[Algorithm]' 카테고리의 다른 글
| hashmap 두 수의 합 (0) | 2023.05.26 |
|---|---|
| 백트래킹- 조합 구현 (0) | 2023.05.23 |
| [탐색] 전략 추려내기 - ABC 줄세우기 (0) | 2023.05.10 |
| 완전탐색 - 최대최소차 (0) | 2023.05.08 |
| 완전탐색 - 여러 구간, 구간 합의 최댓값이 최소가 되도록 (0) | 2023.05.08 |