sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

[Algorithm]

시뮬레이션 - 1차원 폭발 게임

2023. 5. 14. 11:51

문제

M개 이상 연속으로 같은 숫자가 적혀있는 폭탄들은 터지게 되고, 중력에 의해 위에 있던 폭탄들은 밑으로 떨어지게 됩니다. M개 이상 연속한 폭탄은 부분만 터져서는 안되고 전부 다 터져야 합니다.
만약 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
    '[Algorithm]' 카테고리의 다른 글
    • hashmap 두 수의 합
    • 백트래킹- 조합 구현
    • [탐색] 전략 추려내기 - ABC 줄세우기
    • 완전탐색 - 최대최소차
    sugang
    sugang

    티스토리툴바