코딩 테스트(Python)/백준, 프로그래머스
1744 수 묶기
5_hyun
2022. 2. 3. 02:08
반응형
https://www.acmicpc.net/problem/1744
1744번: 수 묶기
길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에
www.acmicpc.net
내 풀이(반례 엄청봤지만 맞음)
ary =[[], [], [], []]
n = int(input())
for i in range(n):
x = int(input())
if x > 0:
ary[0].append(x)
elif x == 0:
ary[1].append(x)
else:
ary[2].append(x)
ary[2].sort()
while(True):
if(len(ary[2]) <= 1):
break
mul = ary[2][0] * ary[2][1]
ary[3].append(mul)
del ary[2][0]
del ary[2][0]
ary[0].sort(reverse = True)
while(True):
if(len(ary[0]) <= 1):
break
a = ary[0][0]
b = ary[0][1]
if(a == 1 or b == 1):
mul = a + b
else:
mul = a * b
ary[3].append(mul)
del ary[0][0]
del ary[0][0]
if(len(ary[2]) > 0):
for i in range(len(ary[1])):
if(len(ary[2]) == 0):
break
del ary[2][0]
result = sum(ary[0]) + sum(ary[2]) + sum(ary[3])
print(result)
ary에 양수, 0, 음수, 곱한 값을 각각 따로 저장한다. 그리고 음수를 오름차순으로 정렬한다. 그 후 while 문에서 큰 음수 값끼리 더한다. 그리고 양수는 내림차순으로 정렬한다. 그리고 큰 수부터 곱한다. 이러다가 두개의 수 중에서 하나라도 1이라면 더한다. 그리고 음수가 존재하면 0으로 곱해준다. 그 다음에 양수, 음수, 곱한 값 리스트를 다 더해준다.
반응형