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