Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자바 ORM 표준 JPA 프로그래밍 7장
- 백준 20055 컨베이어 벨트 위의 로봇
- Kotlin
- 코틀린
- 고급매핑
- Kotlin In Action
- 20055 컨베이어 벨트 위의 로봇
- 13460 구슬탈출 2
- 싱글톤 컨테이너
- 코틸린인액션
- Python
- KotlinInAction
- 스프링 컨테이너와 스프링 빈
- 백준
- Kotlin in action 3장
- 백준 13460 Python
- 객체 지향 설계와 스프링
- kotlin in action 정리
- 스프링 핵심 원리
- 7장 고급매핑
- Kotlin in action 6장
- 기능개발 python
- Kotlin in action 5장
- 스프링 핵심 원리 이해
- Kotlin in action 10장
- 20055
- 컨베이어 벨트 위의 로봇 Python
- spring
- 코틀린인액션
- 스프링 핵심 원리 - 기본편
Archives
- Today
- Total
기록하는 습관
[백준] 2346 풍선 터뜨리기 본문
문제
코드
from collections import deque
N = int(input())
q = deque([(num, idx) for idx, num in enumerate(map(int, input().split()))])
answer = []
while q:
num, idx = q.popleft()
answer.append(idx+1)
if q and num > 0:
q.rotate(-1 * (num-1))
elif q and num < 0:
q.rotate(-1 * num)
print(" ".join(map(str,answer)))
풀이
1. 첫번째 숫자는 우선적으로 popleft()를 통해 꺼낸다.
2-1. q에 풍선이 남아있고, num이 양수일 때 -(num-1) 만큼 회전시킨다.
왜 -1 * (num-1) 인가?
-1 : rotate 함수는 양수면 오른쪽, 음수면 왼쪽으로 회전시킨다. 풍선을 deque 기준 left에 오게끔 하려면 왼쪽으로 회전시켜야 하므로
num-1 : q.popleft()를 통해 먼저 풍선을 터뜨렸고, 양수면 왼쪽으로 회전시켜야 하는데 popleft()를 통해 위치 1을 왼쪽으로 옮긴게 된 것이므로 1개 적게 회전.
q = deque([3, 2, 1, -3, -1])
q.rotate(1)
print(q)
# deque([-1, 3, 2, 1, -3])
2-2. q에 풍선이 남아있고, num이 음수일 때 -1 * num 만큼 회전시킨다.
왜 -1 * num 인가?
-1 : rotate 함수는 양수면 오른쪽, 음수면 왼쪽으로 회전시킨다. 풍선을 deque 기준 left에 오게끔 하려면 오른쪽으로 회전시켜야 하므로
num : 양수와 반대로 1을 빼지 않는 이유는 오른쪽으로 회전시켜야 하므로 popleft()를 해도 양수처럼 적용되지 않기 때문이다.
관련 개념/문법 정리
deque
from collections import deque
- deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
- deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
- deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
- deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
- deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가한다.
- deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가한다.
- deque.remove(item): item을 데크에서 찾아 삭제한다.
- deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽).
enumerate
a = ['first','second','third']
b = list(enumerate(randomlist))
c = dict(enumerate(randomlist))
#b [(0, 'first'), (1, 'second'), (2, 'third')]
#c {0: 'first', 1: 'second', 2: 'third'}
'알고리즘 > [문제풀이] 백준' 카테고리의 다른 글
[백준] 11279 최대 힙 (0) | 2021.05.23 |
---|---|
[백준] 2504 괄호의 값 (0) | 2021.05.13 |
[삼성sw역량테스트 - 기출] 구슬 탈출2 (0) | 2020.10.11 |
[백준] DP - 동전1 (0) | 2020.10.04 |
[백준] DP - 연속합 (0) | 2020.10.03 |
Comments