프로그래밍/python

[python] 백준 11908 카드 (sorted(list 정렬))

pxatd 2022. 1. 13. 14:29
728x90

문제

승현이는 앞면과 뒷면이 있는 카드 n장을 가지고 있습니다. 각 카드의 앞면에는 1 이상 2222 이하의 정수가 적혀 있으며, 이 수는 카드마다 서로 다릅니다. 각 카드의 뒷면에는 동물 그림이 그려져 있으며, 이 그림 역시 카드마다 서로 다릅니다. 승현이는 카드들을 바닥에 뒷면이 보이도록 일렬로 늘어 놓고, 차례대로 1 이상 n 이하의 자연수 번호를 붙였습니다. 이 중 i번 카드의 앞면에 적혀 있는 수를 ci로 둡시다. 승현이는 바닥에 카드가 정확히 한 장 남을 때까지 아래와 같은 행동을 반복합니다.

  1. 승현이는 마음에 드는 서로 다른 카드 두 장을 앞면이 보이도록 뒤집어 봅니다.
  2. 승현이는 앞면에 더 작은 수가 적혀 있는 카드를 주머니 속에 넣고, 더 큰 수가 적혀 있는 카드는 다시 바닥에 뒷면이 보이도록 내려놓습니다.
  3. 카드가 두 장 이상 남았다면 1번으로 돌아갑니다. 카드가 정확히 한 장 남았다면, 승현이는 주머니 속에 있는 카드들을 꺼내 앞면에 적혀 있는 수들의 합을 구합니다.

승현이는 큰 수가 좋아서, 마지막에 주머니 속에 들어있는 카드들에 적혀 있는 수들의 합을 가능한 한 크게 하고자 합니다. (뒷면에 그려진 동물 그림이 서로 다르므로 방법만 알고 있다면 충분히 가능합니다!) 승현이를 도와주세요.

 

 

 

학습

문제를 읽고 가장 큰 수를 제외한 나머지 수를 더하면 답이 나온다는 것은 알고있었다. 그래서 모든 수를 리스트에 저장한 후 마지막 수를 빼면 된다고 생각하여 다음과 같이 작성하였다. 답은 당연히 틀렸고, 왜 그런가 곰곰이 생각해보았더니 리스트에 입력된 수가 무조건 오름차순으로 정렬되지 않을수도 있다는 것을 놓치고 있었다. 백준에서 제시된 예제가 다 잘 정렬된 데이터라 헷갈렸던 것 같다. 나는 왜 자꾸 이런 사소한 조건들을 놓치게 되는걸까 

 

그리고 남들은 숏코딩으로 잘만 해결해내는데 나는 쓸데없는 코드가 길고 게다가 틀린다.. 자괴감이 많이 든다. 

num=int(input())
s=[]
s=list(map(int,input().split()))
i=0
a=0
for i in range(len(s)):
  a=a+s[i]
print(a-s[len(s)-1])

파이썬 정렬 sorted 함수 정리

-sorted(정렬할 데이터)

-sorted(정렬할 데이터, reverse 파라미터)

-sorted(정렬할 데이터, key 파라미터)

-sorted(정렬할 데이터, key 파라미터, reverse 파라미터)


.sort()와 sorted(리스트)의 차이

-리스트.sort()-> 본체의 리스트를 정렬해서 변환하는 것
-sorted(리스트)-> 정렬한 새로운 리스트를 반환하는 


정수형 리스트로 입력받으면서 바로 정렬하고 싶을 때 코드 작성 방법

s=sorted(list(map(int,input().split())))

 

 

코드

num=int(input())
s=[]
s=sorted(list(map(int,input().split())))
print(sum(s[:-1]))

11908번: 카드 (acmicpc.net)

 

11908번: 카드

승현이는 앞면과 뒷면이 있는 카드 n장을 가지고 있습니다. 각 카드의 앞면에는 1 이상 2222 이하의 정수가 적혀 있으며, 이 수는 카드마다 서로 다릅니다. 각 카드의 뒷면에는 동물 그림이 그려져

www.acmicpc.net

 

728x90