본문으로 바로가기

[Python]enumerate사용하기 (백준15565번)

category Python 2018. 5. 25. 11:00

파이썬 enumerate 는 순서가 있는 자료형의 index번호 와 index값 을 반환하는 함수다.

>>> arr = ['토끼','말','늑대','오리','고양이','여우','곰']
>>> for i in arr:
	print(i)
토끼
말
늑대
오리
고양이
여우
곰
이런 array를 enumerate 를 사용하여
>>> arr = ['토끼','말','늑대','오리','고양이','여우','곰']
>>> for i,v in enumerate(arr):
	print('number:{}, value:{}'.format(i,v))
number:0, value:토끼
number:1, value:말
number:2, value:늑대
number:3, value:오리
number:4, value:고양이
number:5, value:여우
number:6, value:곰

이런식으로 index번호를 붙여 사용 가능하다


그리고 enumerate(arr,start=number) 로 시작 번호를 정할 수 있다.

>>> arr = ['토끼','말','늑대','오리','고양이','여우','곰']
>>> for i,v in enumerate(arr,start=1):
	print('number:{}, value:{}'.format(i,v))
number:1, value:토끼
number:2, value:말
number:3, value:늑대
number:4, value:오리
number:5, value:고양이
number:6, value:여우
number:7, value:곰


그럼 enumerate 를 사용하여 쉬운 문제하나를 풀어보게따.


백준 15565번 귀여운 라이언(https://www.acmicpc.net/problem/15565). enumerate를 응용하면 쉽게 풀 수 있는 문제이다.


푼사람이 얼마없어 숏코1등중인 문제..


N개의 인형 중 라이언인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합을 구하는 문제.


문제만봐도 감이온다.


라이언 인형의 index만 알 수 있으면 따로 빼내여 K개 만큼의 index차이중 가장 최소값을 출력하면 될듯.


인형의수 N과 라이언인형의 수 K를 입력받고 인형들의 집합 arr을 입력받자.

N,K = map(int, input().split())
arr = input().split()


그리고 라이언이 K개 이하일경우 예외처리를 해 주고 enumerate로 라이언 인형의 위치배열을 만든다.

if arr.count('1') < K :
    print(-1)
else:
    lion = [i for i, x in enumerate( arr ) if x == '1']


인형의 배열 arr에서 if x=='1' 으로 라이언 인형만 골라내여 lion배열을 만든다.


그리고 만들어진 lion 배열의 K차이만큼의 인덱스중 가장 최소값을 출력하면 정답.

    print(min(lion[K-1+j] - lion[j] + 1 for j in range(len(lion)-K+1)))


전체소스

N,K = map(int, input().split())
arr = input().split()

if arr.count('1') < K :
    print(-1)
else:
    lion = [i for i, x in enumerate( arr ) if x == '1']
    print(min(lion[K-1+j] - lion[j] + 1 for j in range(len(lion)-K+1)))