2024/07/22 2

[백준] 1715번: 카드 정렬하기 (우선순위큐) - Python

https://www.acmicpc.net/problem/1715코딩 테스트를 준비하면 필수로 알아야하는 문법을 가져왔습니다.아이디어는 매우 간단한 문제입니다.누가 봐도 중복으로 계산되는 값이 최대한 작게 만드는 문제고따라서 작은 것들부터 계속 더해가는 그리디로 풀어야하는 것을 알 수 있습니다.그런데! 여기서 문제가 생겨요."작은 것부터 더해? 그러면 정렬을 계속 해야하나?"계속 더해줘야 해서 무조건 반복문이 들어갑니다. 그래서 O(N)은 강제 할당이고O(N)을 반복문 안에서 한 번 더 써버리면 무조건 시간초과가 납니다.문제는 List의 min(), sort() 모두 시간이 O(N)이라는 겁니다.import sysn = int(sys.stdin.readline())cards = []for _ in ran..

[백준] 1789번: 수들의 합 - Python

https://www.acmicpc.net/problem/1789문제가 재미있어서 가지고 왔습니다.엄청 간단한 문제인데, 정작 아이디어를 떠올리는데 오래 걸렸어요.여기서 아이디어가 간단하게 나온 분들도 있을 것 같은데 저는 그냥 i부터 i+N개까지 다 더한게 200이 되면 되는거 아닌가? 라는 단순한 생각을 했습니다.그런데, 코드를 짜고 200을 넣고 해보니, N = 16이 최대 값이더라구요?거기에 i를 증가시켜야하고 덧셈의 결과도 계산해야하니, 시간복잡도가 O(N^2)이 나올 것 같아서 문제의 S의 범위를 보면 절대 불가능한 코드였습니다.고민을 조금 하다보니, 1 ~ N까지의 자연수의 합 공식이 떠올랐고, 1 ~ N까지의 자연수의 합 = n(n+1)/2​n(n+1)/2 ≤ S^2 을 만족하면 무조건 정..