백준 12033번 김인천씨의 식료품가게(small)
오름차순으로 정렬되어 있다란 점을 이용해 코드를 짰다 -> 큰 값부터 확인 시작(전체적인 코드를 보면 이 코드는 효율적인 코드는 아닌거 같다.)
25퍼센트 할인한 값이 리스트 안에 있으면 새로운 리스트 안에 넣어줌으로써 할인 가격들을 리스트에 담아 정렬한 뒤 출력한다.
이때 주의할 점은 이미 확인 작업이 끝나 새로운 리스트에 담은 값들은 중복확인되지 않게 따로 표시를 해줘야 한다는 점인데 이 코드에서는 -1로 초기화해줬다.
메모리 : 30860 KB
시간 : 64 ms
import sys
t = int (sys .stdin .readline ())
c = 1
while t > 0 :
t -= 1
case = int (sys .stdin .readline ())
lst = list (map (int , sys .stdin .readline ().split ()))
sale = []
for i in range (len (lst )- 1 ,- 1 ,- 1 ):
if lst [i ]* 0.75 in lst :
sale .append (int (lst [i ]* 0.75 ))
lst [lst .index (lst [i ]* 0.75 )] = - 1
lst [i ] = - 1
if len (sale ) == case :
break
sale .sort ()
print (f"Case #{ c } : " , end = "" )
for s in sale :
print (s , end = " " )
c += 1
print ()
이 코드같은 경우 위의 코드와 로직은 같다. 다만 중복확인을 신경쓰지 않아 틀렸다.
할인된 값과 할인되기 전의 가격이 쌍으로 적힌 것이기 때문에 중복해서 확인하지 않도록 장치를 마련해둬야 한다.
import sys
t = int (sys .stdin .readline ())
c = 1
while t > 0 :
t -= 1
case = int (sys .stdin .readline ())
lst = list (map (int , sys .stdin .readline ().split ()))
sale = []
for l in lst [::- 1 ]:
if l * 0.75 in lst :
sale .append (int (l * 0.75 ))
if len (sale ) == case :
break
sale .sort ()
print (f"Case #{ c } : " , end = "" )
for s in sale :
print (s , end = " " )
c += 1
print ()