티스토리 뷰
deque는 양방향 자료구조로써 한쪽으로만 데이터를 넣고 뺄 수 있는 리스트와 다르게 앞 뒤에서 데이터를 넣고 뺄 수 있는 자료구조입니다. Python에는 from collections import deque을 통해 deque 자료구조를 생성할 수 있습니다. 이번 글에서는 deque을 활용해 해결할 수 있는 문제들을 풀어보겠습니다.
1. 공 던지기
https://school.programmers.co.kr/learn/courses/30/lessons/120843
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
공 던지기 게임 룰은 1번부터 던지면서 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있다는 것입니다. 정수 배열과 정수 K가 주어졌을 때 K번째로 공을 던지는 사람의 번호를 출력해야 합니다.
Test Case 1. numbers = [1, 2, 3, 4] K = 2
첫번째 : 1번이 3번에게 공 던지기
두 번째 : 3번이 1번에게 공 던지기
따라서 2번째로 공을 던지는 사람의 번호는 3번
Test Case 2. numbers = [1, 2, 3, 4, 5, 6] K = 5
첫 번째 : 1번이 3번에게 공 던지기
두 번째 : 3번이 5번에게 공 던지기
세 번째 : 5번이 1번에게 공 던지기
네 번째 : 1번이 3번에게 공 던지기
다섯 번째 : 3번이 5번에게 공 던지기
따라서 5번째로 공을 던지는 사람의 번호는 3번
Solution)
입력받은 정수 배열을 deque로 생성하여 공을 던진 사람, 룰에 의한 건너뛰어진 사람이 연속적으로 뒤 순서로 연결되도록 하기
Test case 1.
1 | 2 | 3 | 4 |
3 | 4 | 1 | 2 |
배열의 앞 2명을 꺼낸 후 뒤쪽에다가 순서대로 붙이기 => deque의 popleft와 append 활용
from collections import deque
def solution(numbers, k):
answer = 0
nums = deque(numbers)
while k!=1:
for x in range(2):
nums.append(nums.popleft())
k -= 1
answer = nums[0]
return answer
2. 문자열 계산하기
https://school.programmers.co.kr/learn/courses/30/lessons/120902
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열로 입력된 수식을 계산하는 문제
가장 중요한 조건은 계산 결과는 항상 1 이상 100,000인 이하인 자연수
Test Case 1. "3 + 4"
answer = 7
Test Case 2. "100 - 101:
answer = 1
Solution)
입력된 문자열에서 공백을 없앤 후, 숫자는 deque에 연산자는 리스트에 넣기
=> 숫자는 먼저 입력된 순서대로 계산되어야 올바른 값이 나온다.
만약 숫자를 리스트에 넣는다면, "5 - 2"는 2가 먼저 나와서 (5 - 2)가 아니라 (2 - 5)로 계산된다.
from collections import deque
def solution(my_string):
answer = 0
my_string = my_string.strip().split(' ')
num, operator = deque(), []
answer = 0
for x in my_string:
try: #입력된 문자열에서 숫자를 int형으로 변환 후 list에 삽입
num.append(int(x))
except ValueError as m:
operator.append(x)
while len(num) != 0:
answer = num.popleft() #먼저 입력된 순서대로 deque에서 빼기
for y in operator:
if y == '-':
answer = answer - num.popleft()
else:
answer = answer + num.popleft()
#계산한 값은 1이상 100000이하이다
if answer < 0:
answer = 1
elif answer > 100000:
answer = 100000
return answer
'Python' 카테고리의 다른 글
[프로그래머스] 겹치는 선분의 길이 (0) | 2025.03.15 |
---|---|
[프로그래머스] 순열과 조합을 이용한 문제 연습 (0) | 2025.02.16 |
[프로그래머스] List 인덱싱을 활용한 문제 풀이 (1) | 2025.01.30 |
[프로그래머스] 가까운 수 (sorted함수 연습) (0) | 2025.01.23 |
[프로그래머스] 배열 회전시키기 (0) | 2025.01.21 |
- python #deque #프로그래머스 #공 던지기 #문자열 계산하기 #코딩테스트
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- subquery #sql 코딩테스트
- nlp #토큰화 #nltk #konply
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- seaborn #데이터시각화 #타이타닉
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- #attention #deeplearning
- 머신러닝 #project #classification #dacon
- #프로그래머스 #안전지대 #시뮬레이션
- 파이썬 #시각화 #matplotlib
- 잘라서 배열로 저장하기 #2차원으로 만들기
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- 머신러닝 #lightgbm #goss #ebf
- html #javascript #구구단 출력
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- #opencv #이미지 연산 #합성
- #seq2seq #encoder #decoder #teacher forcing
- # 프로그래머스 #연속된 부분수열의 합 #이중 포인터 #누적합
- 머신러닝 #xgboost #
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- python #프로그래머스 #리스트 #인덱싱
- #tf idf
- gan #생성자 #판별자 #적대적 신경 신경망 #딥러닝 #computer vision
- 파이썬 #코딩테스트 #프로그래머스 #스택 #큐
- 딥러닝 #오차역전파 #연쇄법칙 #계산그래프 #최적화
- python #프로그래머스 #겹치는선분의길이