정화 코딩

EDOC 2023-2 3주차 과제 본문

Group/EDOC

EDOC 2023-2 3주차 과제

jungh150c 2023. 10. 7. 01:14

03-5. 스택과 큐

 

011. 스택 수열 (백준 1874번)

 

https://www.acmicpc.net/problem/1874

 

from sys import stdin

n = int(stdin.readline())
data = []
stk = []
ans = []

for _ in range(n):
    data.append(int(stdin.readline()))

i = 0
for j in range(1, n+1):
    stk.append(j)
    ans.append("+")
    while (data[i] == stk[-1]):
        stk.pop()
        ans.append("-")
        i += 1
        if len(stk) == 0:
            break

if len(stk) == 0:
    for i in ans:
        print(i)
else:
    print("NO")

 

(정답)

 


 

012. 오큰수 (백준 17298번)

 

https://www.acmicpc.net/problem/17298

 

from sys import stdin

n = int(stdin.readline())
data = list(map(int, stdin.readline().split()))
stk = []
oks = [0] * n

for i in range(0, n):
    while len(stk) != 0 and data[stk[-1]] < data[i]: 
        oks[stk.pop()] = data[i]
    stk.append(i)

while len(stk) > 0:
    oks[stk.pop()] = -1

for i in oks:
    print(i, end=" ")

 

너무 어려웠다... 오빠가 옆에서 계속 힌트줘서 겨우 풀었다... 풀고 나니 코드가 넘 간단해서 약간의 현타와 상당한 쾌감... (정답)

 


 

013. 카드2 (백준 2164번)

 

https://www.acmicpc.net/problem/2164

 

import sys
from collections import deque

n = int(sys.stdin.readline())
deq = deque()

for i in range(1, n+1) :
    deq.append(i)

while len(deq) != 1 :
    deq.popleft()
    deq.append(deq.popleft())

print(deq.popleft())

 

(정답)

 


 

014. 절댓값 힙 (백준 11286번)

 

https://www.acmicpc.net/problem/11286

 

from queue import PriorityQueue
from sys import stdin

n = int(stdin.readline())
que = PriorityQueue()

for _ in range(n):
    num = int(stdin.readline())

    if num == 0:
        if que.empty():
            print(0)
        else:
            print(que.get()[1])
    else:
        que.put((abs(num), num))

 

우선순위 큐 처음 사용해봤다. 아직 원리는 잘 모르겠지만 사용하는 건 어렵지 않았다. (정답) 근데 우선순위 큐랑 힙큐는 같은건가..??

 


04-1. 버블 정렬

 

015. 수 정렬하기 1 (백준 2750번)

 

https://www.acmicpc.net/problem/2750

 

from sys import stdin

n = int(stdin.readline())
data = []

for i in range(n):
    data.append(int(stdin.readline()))

for i in range(0, n-1):
    for j in range(0, n-1-i):
        if data[j] > data[j+1]:
            temp = data[j]
            data[j] = data[j+1]
            data[j+1] = temp

for i in data:
    print(i)

 

예전에는 그냥 sort()로 풀었던 것 같다. 이번에는 공부삼아 버블 정렬을 직접 작성하여 풀었다. (정답)

 


 

016. 버블 소트 (백준 1377번)

 

https://www.acmicpc.net/problem/1377

 

from sys import stdin

n = int(stdin.readline())
data = []

for i in range(n):
    data.append((int(stdin.readline()), i))

data.sort()
max = 0

for i in range(n):
    if data[i][1] - i > max:
        max = data[i][1] - i

print(max + 1)

 

튜플을 정렬할 때는 첫번째 값으로 먼저 정렬하고, 같으면 두번째 값으로 정렬하고 이런식으로 되는 것 같다. 아마도... (정답)

 


04-2. 선택 정렬

 

017. 소트인사이드 (백준 1427번)

 

https://www.acmicpc.net/problem/1427

 

from sys import stdin

data = list(map(int, stdin.readline().strip()))
n = len(data)

for i in range(0, n-1):
    maxIndex = i
    for j in range(i+1, n):
        if data[j] > data[maxIndex]:
            maxIndex = j
    temp = data[maxIndex]
    data[maxIndex] = data[i]
    data[i] = temp

for i in data:
    print(i, end="")

 

이것도 마찬가지로 예전에 풀었던 문제지만 공부겸 선택 정렬로 다시 풀었다. (정답)

 

'Group > EDOC' 카테고리의 다른 글

EDOC 2023-2 4주차 과제  (0) 2023.11.06
EDOC 2023-2 4회차 정모  (0) 2023.10.09
EDOC 2023-2 3회차 정모  (0) 2023.10.02
EDOC 2023-2 2주차 과제  (0) 2023.09.26
EDOC 2023-2 2회차 정모  (0) 2023.09.26
Comments