SWEA
[D3] SWEA 19113. 식료품 가게
코테봇
2024. 4. 27. 07:12
처음에 정말 헤맸다.
정상가는 4의 배수니까
4의 배수이면 무조건 정상가일테고
응? 근데 할인가도 4의 배수인게 있네
그러면 할인가는 정상가의 0.75배니까
0.75로 나눠떨어지는 수야
응? 근데 정상가도 얼마든지 0.75로 나눠질 수 있잖아
이런 식으로 계속해서 헤매고 있다가
오름차순 배열이란 말에 딱! 하고 문제 풀이를 떠올렸다
1. 접근 방식
S[0]은 무조건 어떤 가격의 할인가고
S[-1]은 무조건 어떤 가격의 정상가다!!
이 사실을 안 순간,
문제는 다 풀렸다.
[아래 그림 참고하면 이해가 쉽다.]
2. 디테일한 구현
처음에는 리스트의 맨 처음값, 맨 마지막 값을 활용하여
(할인가,정상가) 2쌍을 없애려했다.
근데, 마지막에 1쌍이 남는 경우도 있기에
원소를 4개씩 없애는 건 힘들었고,
결국 2개씩 없애는 방식으로 문제 풀이에 성공한다
.
3. 코드 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
if __name__=='__main__':
# sys.stdin=open('input2.txt','r')
t=int(input()) ## 총 테스트 케이스 개수
for tc in range(t):
n=int(input()) ##상점의 품목 수
res=[]
s=list(map(int,input().split())) ## 오름차순 정렬 (할인가,정상가)
while len(s)>0:
og=(s[0]*4)//3 ##할인가와 그에 해당하는 정상가
down=int(s[-1]*0.75) ##정상가와 그에 해당하는 할인가
res.append(s.pop(0)) ##할인가 빼고
s.remove(og) #할인가에 해당하는 정상가 빼고
print(f'#{tc+1}',end=' ')
for x in res:
print(x,end=' ')
print()
|
cs |