전체 글
-
★큐,덱★라우터[백준 파이썬 15828번]2022.11.03
-
★큐,덱★큐 2[백준 파이썬 18258번]2022.11.03
-
str★split()★괄호[백준 파이썬 9012번]2022.11.02
-
★스택★제로[백준 파이썬 10828번]2022.11.02
-
★스택★[백준 파이썬 10828번]2022.11.02
-
★그리디알고리즘★주유소[백준 파이썬 13305번]2022.11.01
★큐,덱★라우터[백준 파이썬 15828번]
import sys
from collections import deque
N = int(sys.stdin.readline())
queue = deque()
while True:
b = int(sys.stdin.readline())
if b== -1:
break
else:
if b==0:
queue.popleft()
elif len(queue) < N:
print(queue)
queue.append(b)
if len(queue)>0:
# print(len(queue))
# print(queue)
for i in queue:
print(i, end = ' ')
else:
print('empty')
1. 입력값 -1 일경우 WHILE문 BREAK
2. 입력값이 0일경우 buffer (queue)에 존재하는 값 popleft
3. elif len(queue) < N: ==> queue의 길이가 주어진 deque 공간(N=5) 보다 작아야한다. ==> 작거나 같으면 안되는 이유로는 append를 5번 수행해야하므로!
라우터 내 버퍼의 크기 (N) 이 5라 하면 ==> DEQUE 공간이 5개가 있는 것 ㅁㅁㅁㅁㅁ
'Python(백준) > 큐,덱' 카테고리의 다른 글
★str, join 기억하기★VER2.0★요세푸스문제0[백준 파이썬 11866번]★ (0) | 2023.04.24 |
---|---|
[백준 파이썬 11286번]★절댓값 힙 구현하기★heap.heappush(리스트 , (우선순위 비교값_1) , (우선순위 비교값_2)★heap.heappop(리스트) ==> 우선순위에 따른 pop() (1) | 2022.12.31 |
★큐,덱★Ver2.0★카드2[백준 파이썬 2164번] (0) | 2022.12.31 |
[백준 파이썬 17298번]오큰수★시간초과★VER2.0★ (0) | 2022.12.31 |
★큐,덱★큐 2[백준 파이썬 18258번] (0) | 2022.11.03 |
★큐,덱★큐 2[백준 파이썬 18258번]
import sys
from collections import deque
queue = deque()
N = int(sys.stdin.readline())
B =[]
for i in range(N):
c = list(map(str, sys.stdin.readline().rstrip().split(' ')))
if c[0] == 'push':
queue.append(c[1])
elif c[0] == 'pop':
if len(queue) == 0:
B.append(-1)
else:
B.append(queue.popleft())
elif c[0] == 'size':
B.append(len(queue))
elif c[0] == 'empty' :
if len(queue) == 0:
B.append(1)
else:
B.append(0)
elif c[0] == 'front':
if len(queue) == 0:
B.append(-1)
else:
B.append(queue[0])
elif c[0] == 'back':
if len(queue) == 0:
B.append(-1)
else:
B.append(queue[-1])
for i in B:
print(i)
deque() ==> 덱의 경우
양 옆으로 뺄 수 있다.
popleft() 왼쪽꺼 뺄 수 있는거고 , popright() 오른쪽꺼 뺄 수 있는거다.
'Python(백준) > 큐,덱' 카테고리의 다른 글
★str, join 기억하기★VER2.0★요세푸스문제0[백준 파이썬 11866번]★ (0) | 2023.04.24 |
---|---|
[백준 파이썬 11286번]★절댓값 힙 구현하기★heap.heappush(리스트 , (우선순위 비교값_1) , (우선순위 비교값_2)★heap.heappop(리스트) ==> 우선순위에 따른 pop() (1) | 2022.12.31 |
★큐,덱★Ver2.0★카드2[백준 파이썬 2164번] (0) | 2022.12.31 |
[백준 파이썬 17298번]오큰수★시간초과★VER2.0★ (0) | 2022.12.31 |
★큐,덱★라우터[백준 파이썬 15828번] (0) | 2022.11.03 |
str★split()★괄호[백준 파이썬 9012번]
import sys
A = int(sys.stdin.readline())
res , res2 = [] ,[]
stack = []
first_len = 0
for i in range(A):
res = ""
idx =""
res = str(sys.stdin.readline().rstrip()) #입력 : (()) ==> res = "((())"
idx = res
while True:
if '()' in idx: #idx= '((())'
B = idx.split('()') # ()를 기준으로 나눈 list 화 ['(' ,'']
idx = ""
for i in B: #B = ['(' , '']
idx += i #idx = (
else:
break
if idx == '':
res2.append('YES')
else:
res2.append('NO')
for i in res2:
print(i)
split() 함수의 사용에 익숙해지자!
'Python(백준) > 스택' 카테고리의 다른 글
[백준 파이썬 4949번]균형잡힌 세상★.join(map(str , 변수)) (0) | 2023.04.23 |
---|---|
[백준 파이썬 1874번]스택수열★마지막 찾을값 조건생각하기★VER2.0★ (0) | 2022.12.30 |
★스택★제로[백준 파이썬 10828번] (0) | 2022.11.02 |
★스택★[백준 파이썬 10828번] (0) | 2022.11.02 |
★스택★제로[백준 파이썬 10828번]
import sys
k = int(sys.stdin.readline())
b= []
for i in range(k):
c = int(sys.stdin.readline())
if c==0 and len(b)>=1:
b.pop()
else:
b.append(c)
print(sum(b))
==> c값으로 0 받고 b의 길이가 1이상일경우 pop() 실행
'Python(백준) > 스택' 카테고리의 다른 글
[백준 파이썬 4949번]균형잡힌 세상★.join(map(str , 변수)) (0) | 2023.04.23 |
---|---|
[백준 파이썬 1874번]스택수열★마지막 찾을값 조건생각하기★VER2.0★ (0) | 2022.12.30 |
str★split()★괄호[백준 파이썬 9012번] (0) | 2022.11.02 |
★스택★[백준 파이썬 10828번] (0) | 2022.11.02 |
★스택★[백준 파이썬 10828번]
https://www.acmicpc.net/problem/10828
import sys
A = int(sys.stdin.readline())
stack = []
B = []
#스택은 LIFO 형태로 먼저들어온게 뒤에 들어가있는다. 나중에 들어온게 처음에 들어가있고.
for i in range(A):
c = list(map(str, sys.stdin.readline().rstrip().split()))
if c[0] == 'push':
c[1] = int(c[1])
stack.append(c[1])
elif c[0] =='pop' :
if len(stack)>=1:
print(stack.pop())
else:
print(-1)
elif c[0] == 'size':
print(len(stack))
elif c[0] == 'empty':
if len(stack)>=1:
print(0)
else:
print(1)
elif c[0] == 'top':
if len(stack)>=1:
print(stack[-1])
else:
print(-1)
스택은 나중에 들어온게 뒤에 서있다.
pop()의 경우 뒤에꺼 먼저 뺀다. ==> LIFO(LAST IN FIRST OUT) 방식이다.
'Python(백준) > 스택' 카테고리의 다른 글
[백준 파이썬 4949번]균형잡힌 세상★.join(map(str , 변수)) (0) | 2023.04.23 |
---|---|
[백준 파이썬 1874번]스택수열★마지막 찾을값 조건생각하기★VER2.0★ (0) | 2022.12.30 |
str★split()★괄호[백준 파이썬 9012번] (0) | 2022.11.02 |
★스택★제로[백준 파이썬 10828번] (0) | 2022.11.02 |
★sorted(a, key = lambda x : x[0])★그리디알고리즘★회의실배정[백준 파이썬 1931번]
import sys
A = int(sys.stdin.readline())
B=[]
for i in range(A):
c = list(map(int,sys.stdin.readline().split()))
B.append(c)
B = sorted(B, key = lambda x : x[0] )
C = sorted(B , key = lambda x : x[1])
print(B)
print(C)
last = 0
count = 0
for i in C:
if i[0] >= last: #i[0] = 1 last = 0 ==> last = 4 count =1
#i[0] = 3 last =4 X
#i[0] = 0 last = 4 X
#i[0] = 5 last = 4 ==> last = 5 count =2
#
last = i[1]
count+=1
print(count)
그리디는 당장의 상황을 기준으로 확장시키는 방향으로 해결
시작시간으로 먼저 정렬을 해준 후에, 종료 시간을 기준으로 정렬을 해준다.
SORTED 함수를 활용하여 정렬해준다. SORTED ( B, key = lambda x : x[0] )
==> 끝나는 시간의 오름차순으로 정렬해준다. ==> 앞의 끝나는 시간(last) 이 뒤 회의의 시작 시간(i[0])보다 작거나 같다면 count 해준다.
==> 정렬 해준것의 1번째 부터의 count 해주면 된다.
'Python(백준) > 그리디알고리즘' 카테고리의 다른 글
★VER2.0★DEQUE 활용★누적합★그리디알고리즘★ATM[백준 파이썬 11399번] (0) | 2023.01.01 |
---|---|
★그리디알고리즘★주유소[백준 파이썬 13305번] (0) | 2022.11.01 |
★데이터타입변환map★re활용한 split()★잃어버린 괄호[백준 파이썬 1541번] (0) | 2022.11.01 |
★그리디알고리즘★ 동전 0 [백준 파이썬 11047번] (0) | 2022.11.01 |
★그리디알고리즘★주유소[백준 파이썬 13305번]
https://www.acmicpc.net/problem/13305
import sys
a = int(sys.stdin.readline())
b = list(map(int ,sys.stdin.readline().split()))
c = list(map(int, sys.stdin.readline().split()))
price = c[0]*b[0] #초기값
idx = c[0]
#print(idx)
for i in range(1, len(c)-1):
#print(c[i])
if c[i] < idx:
# print("idx : {}".format(idx))
idx = c[i]
price += idx*b[i]
else:
price += idx*b[i]
print(price)
노드가 있을 때
0 - 0 - 0- 0
1번째 노드의 초기값 설정을 해준다.
price = c[0] *b[0] ==> 리터당 기름값* (1번째 To 2번째 길이)
for문을 통해 리터당 기름값이 싼거에 대해서 idx변수로 치환시킨다.
--> 만약 기름값이 앞에 도시보다 싸다? idx에 싼곳의 기름값 넣는다.
price 에 기름값과 도시간 거리로 가격 더하고
-->기름값이 앞의 도시가 싸다! idx 변환 시키지 말고 price에 기름값과 도시간 거리 곱하여 가격을 더한다.
'Python(백준) > 그리디알고리즘' 카테고리의 다른 글
★VER2.0★DEQUE 활용★누적합★그리디알고리즘★ATM[백준 파이썬 11399번] (0) | 2023.01.01 |
---|---|
★sorted(a, key = lambda x : x[0])★그리디알고리즘★회의실배정[백준 파이썬 1931번] (0) | 2022.11.02 |
★데이터타입변환map★re활용한 split()★잃어버린 괄호[백준 파이썬 1541번] (0) | 2022.11.01 |
★그리디알고리즘★ 동전 0 [백준 파이썬 11047번] (0) | 2022.11.01 |
★데이터타입변환map★re활용한 split()★잃어버린 괄호[백준 파이썬 1541번]
https://www.acmicpc.net/problem/1541
import sys
import re
A = str(sys.stdin.readline().rstrip()) #str 타입으로 A변수에 받아온다.
c = 0
d = 0
B = A.split('-') #B리스트에 A를 슬라이싱한다. ==> -를 기준으로 나눈다
#print(bool(A.split('-')))
# print(re.split("[-, +]" , A)) #정규식 활용시 -,+ 두개의 SPLIT()으로 나눌 수 있다.
C = B[0].split('+')
C = list(map(int, C)) #데이터 타입 변환!
c +=sum(C)
if len(B)>1:
for i in B[1:]:
D = i.split('+')
D = list(map(int, D))
d+= sum(D)
print(c - d)
1. 정규식 RE 활용 ==> SPLIT() 시 여러개의 문자열로 나눌 수 있다!
re.split("[-, +]" , A)
2. 데이터 타입 변환을 원할 시
list(map(int, C)
map함수를 활용한 list 를 쓰자!
3. 알고리즘 생각
'-'의 크기가 가장 커야한다 ==> -를 기준으로 나누면 가로로 묶일 것들이 나누어진다!
이걸 마이너스가 나오기 이전의 첫번째 더한값과 빼면 최소값이 나온다!
'Python(백준) > 그리디알고리즘' 카테고리의 다른 글
★VER2.0★DEQUE 활용★누적합★그리디알고리즘★ATM[백준 파이썬 11399번] (0) | 2023.01.01 |
---|---|
★sorted(a, key = lambda x : x[0])★그리디알고리즘★회의실배정[백준 파이썬 1931번] (0) | 2022.11.02 |
★그리디알고리즘★주유소[백준 파이썬 13305번] (0) | 2022.11.01 |
★그리디알고리즘★ 동전 0 [백준 파이썬 11047번] (0) | 2022.11.01 |