Skip to content

Latest commit

 

History

History
70 lines (60 loc) · 2.03 KB

12033.md

File metadata and controls

70 lines (60 loc) · 2.03 KB

백준 12033번 김인천씨의 식료품가게(small)

image


코드 설명

  • 오름차순으로 정렬되어 있다란 점을 이용해 코드를 짰다 -> 큰 값부터 확인 시작(전체적인 코드를 보면 이 코드는 효율적인 코드는 아닌거 같다.)
  • 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()