알고리즘/SWEA
[SWEA]230201 문제풀이
stubborngastropod
2023. 2. 1. 19:15
728x90
gravity
T = int(input())
for k in range(T):
N = int(input())
nlist = list(map(int, input().split()))
drop = []
for i in range(N):
count = 0
for j in nlist[i + 1:]:
if j < nlist[i]:
count += 1
drop.append(count)
print(f'#{k + 1} {max(drop)}')
2차원 배열로 푸는 문젠줄 알았지만 알고보니 1차원 배열로 빠르게 찾아낼 수 있었던 문제. 간단히 생각하는 습관을 가지자
4831. 전기 버스
T = int(input())
for i in range(T):
K, N, M = map(int, input().split())
stops = list(map(int, input().split()))
elec = K
now = 0
charge = 0
dis = []
for j in range(1, len(stops)):
dis.append(stops[j] - stops[j - 1])
if max(dis) > K:
charge = 0
else:
while now < N:
if elec > 0:
elec -= 1
now += 1
elif elec == 0 and now in stops:
elec = K
charge += 1
else:
while True:
elec += 1
now -= 1
if now in stops:
elec = K
charge += 1
break
else:
continue
print(f'#{i + 1} {charge}')
백준 문제였으면 진작에 틀렸을 파멸의 4중 반복문...
다른 사람들은 코드 길이 절반정도 되던데, 생각해놓은 로직에서 파고들어가다보니 이리 된 것 같다.
View
for i in range(10):
views = 0
N = int(input())
bldg = list(map(int, input().split()))
for j in range(2, len(bldg)-2):
side = [bldg[j-2], bldg[j-1], bldg[j+1], bldg[j+2]]
if bldg[j] > max(side):
views += bldg[j] - max(side)
print(f'#{i+1} {views}')
발상이 빠르게 돼서 쉽게쉽게 풀 수 있었다. 다른 문제도 이렇게 쉽게 풀리면 좋을텐데...
Flatten
for i in range(10):
d = int(input())
box = list(map(int, input().split()))
while d > 0:
M = box.index(max(box))
m = box.index(min(box))
box[M] -= 1
box[m] += 1
d -= 1
M = box.index(max(box))
m = box.index(min(box))
print(f'#{i+1} {box[M]-box[m]}')
마지막에 인덱스 업데이트 해주는 부분이 좀더 깔끔했으면 하지만 이정도도 만족한다. 일단은 숏코딩보다는 로직에 집중하기로
728x90