알고리즘/백준
[백준]230127 문제풀이
stubborngastropod
2023. 1. 30. 20:45
728x90
2304. 창고 다각형
N = int(input())
cols = []
for i in range(N):
LH = list(map(int, input().split()))
cols.append(LH)
cols1 = sorted(cols, key = lambda x: x[0])
cols2 = sorted(cols, reverse = True, key = lambda x: x[0])
list1, list2 = [], []
for i in cols:
list1.append(i[0])
list2.append(i[1])
A = max(list1) - min(list1) + 1
B = max(list2)
s1 = 0
a, b = cols1[0][0], cols1[0][1]
for i in cols1[1:]:
if i[1] > b:
a = i[0] - a
s1 += a * (i[1] - b)
a = cols1[0][0]
b = i[1]
s2 = 0
a, b = cols2[0][0], cols2[0][1]
for i in cols2[1:]:
if i[1] > b:
a = a - i[0]
s2 += a * (i[1] - b)
a = cols2[0][0]
b = i[1]
print((A * B) - (s1 + s2))
원랜 높이가 최대값인 요소에서 양쪽으로 내려가려고 했는데 잘 안돼서 컨닝 후 양쪽에서 한번씩 밀어보는 식으로 구현했다. 이제 안풀리면 답지 보는 연습을 해야한다
2841. 외계인의 기타연주
import sys
guitar = []
for i in range(6):
guitar.append([0])
count = 0
N, P = map(int, sys.stdin.readline().split())
for i in range(N):
string, pret = map(int, sys.stdin.readline().split())
if pret > guitar[string - 1][-1]:
guitar[string - 1].append(pret)
count += 1
elif pret < guitar[string - 1][-1]:
while pret < guitar[string - 1][-1]:
count += 1
guitar[string - 1].pop(-1)
if pret > guitar[string - 1][-1]:
guitar[string - 1].append(pret)
count += 1
else:
pass
print(count)
기타를 이미 알고있지 않았다면 적잖이 당황했을 듯. 손가락 떼는것도 잘 고려해서 풀어냈다(시간 초과 뜰때면 어김없이 찾아오는 import sys...)
9012. 괄호
T = int(input())
for i in range(T):
ps = input()
stack = 0
for j in ps:
if j == '(':
stack += 1
elif j == ')':
stack -= 1
if stack < 0:
break
if stack == 0:
print('YES')
else:
print('NO')
해답이 바로 떠올라서 의외로 쉽게 푼 문제. 그리디도 그렇고 첨부터 발상이 좋으면 쉽게 풀리는 것 같다.
10799. 쇠막대기
ps = input()
pipes = 0
cut = 0
for i in range(len(ps)):
if ps[i] == '(':
pipes += 1
elif ps[i] == ')' and ps[i-1] == '(':
pipes -= 1
cut += pipes
elif ps[i] == ')':
pipes -= 1
cut += 1
print(cut)
마찬가지로 보자마자 해법이 잘 떠올랐다. 문제는 풀면서 계속 답을 확인하면서 오류를 찾게 되는데, 애초에 계획을 잘 세워야 코드가 깔끔하게 나올 것 같다.
10828. 스택
import sys
N = int(sys.stdin.readline())
stack = []
for i in range(N):
cmd = str(sys.stdin.readline().strip())
if cmd == 'pop':
if stack == []:
print('-1')
else:
print(stack.pop(-1))
elif cmd == 'size':
print(len(stack))
elif cmd == 'empty':
if stack == []:
print('1')
else:
print('0')
elif cmd == 'top':
if stack == []:
print('-1')
else:
print(stack[-1])
else:
num = cmd.strip('push ')
stack.append(int(num))
제목부터 스택 개념 잡기 위한 문제... 자료형 생각하기만 좀 귀찮았다
728x90