12주차 #1715 카드정렬하기

Yona·2021년 11월 11일
1

🍕 baekjoon

목록 보기
15/31

🐶 문제

백준링크

💬 처음 든 생각

  1. 어떻게 정렬하느냐가 중요한게 아니라, 정렬 순서의 경우의 수마다 비교 횟수를 구하는게 중요한 것 같은데 모든 경우의 수를 구하는건 확률과 통계의 nPr 이 생각남. 여기서는 모든 카드 묶음을 뽑아야하는거니까 nPn 이면 결국 n! 과 같아진다.
    그럼 최악의 경우 100,000! 의 케이스를 계산해야할텐데
    딱봐도 2억번의 연산을 넘길것같다.
  1. 그러면 가장 작은 연산이 나오는 법칙을 찾아야할텐데,
    직관적으로 생각했을때 가장 앞에 나오는 수가 가장 많이 반복되니 , 가장 앞에 나오는 수가 가장 작은 수가 되어야겠다 라는 생각이 들었다.

✔️ 첫번째 시도

가장 앞에 나오는 수가 가장 많이 반복되니 , 가장 앞에 나오는 수가 가장 작은 수가 되어야겠다 < 를 구현 해봤다.

이렇게 생각하면 점화식은
a1=n1+n2이고,나머지an=nn(,n>=2)a_1=n_1+n_2 이고, 나머지 a_n=n_n(단,n>=2) 일때
Σ1k{n1k+n2(k1)+...+nn1}\Sigma_1^k\{n_1*k+n_2*(k-1)+...+n_n*1\} 로 정리했다.

# 데이터 입력
N = int(input())
data = []
for _ in range (N) :
  data.append(int(input()))
print(data)

# 데이터 오름차순 정렬
data = data.sort()
data_len = len(data)

# 점화식 예외
if data_len == 1 :
  print(data[0])
  exit(0)

# 점화식 전처리
result = 0
first_set = data[0] + data[1]
del data[0]
del data[1]
data.insert(0, first_set)

# 점화식
for i in range(data_len) :
  for _ in range(0, i+1, 1) :
      result += data[i]

print(result)

그런데 계속

다 됐는데 이런 에러가 난다ㅠㅠ
왜 리스트의 길이를 구할 수 없는거지??
이거 검색해보다가 시간이 다됐다ㅠㅠ

profile
Sometimes you win, sometimes you learn 🏃‍♀️

2개의 댓글

comment-user-thumbnail
2021년 11월 11일

이거 아마
data = data.sort()
이렇게 sort() 반환값을 다시 배정해서 사용하는 것이 아닌

data.sort() 이렇게만 사용하는 걸거에욧

답글 달기
comment-user-thumbnail
2021년 11월 11일

list.sort()는 반환값이 없습니다.
따라서, data = sorted(data)로 작성하시거나 data.sort()로 수정하시면 해당 에러를 해결하실 수 있을 것 같습니다.

답글 달기