https://www.acmicpc.net/problem/20116 코드n, l = map(int, input().split())x = list(map(int, input().split()))center = x[-1] # 무게 중심num = 1for i in range(n-2, -1, -1): if center = (x[i]+l): print("unstable") exit() center = ((center*num)+x[i])/(num+1) # 위에서부터 i번째까지의 무게 중심 num += 1 # i번째까지 상자 개수print("stable") i번째보다 높은 상자들의 무게 중심이 i번째 상자 안에 있는지 판별해야 하므로 위에서부터 내려와야 한다. 우..
전체 글
https://www.acmicpc.net/problem/20115 코드n = int(input())drinks = list(map(int, input().split()))drinks.sort()ans = drinks[-1]for i in range(len(drinks)-1): ans += (drinks[i]/2)print(ans) 처음에는 남은 음료들 중 가장 양이 적은 2개를 골라서 합쳐야 하는줄 알았는데, 아니었다. 매 순서에 2로 나누어지는 음료들을 최대한 작게 해주어야 하는데, 이렇게 하면 그럴 수 없다.예를 들어, 음료 5개가 가장 작은 것부터 순서대로 a, b, c, d, e 이렇게 있다고 하면 원래 생각한 방법대로면 처음에 a, b를 뽑아서 (a/2)+b를 만들게 된다. 그 다음 순서..
https://www.acmicpc.net/problem/10867 코드#include #include using namespace std;int main(){ int n; cin >> n; set s; int tmp; for(int i=0;i::iterator iter=s.begin();iter!=s.end();iter++){ printf("%d ", *iter); } return 0;} 이 문제는 집합을 이용하여 풀면 쉽게 풀 수 있다. 다행히 C++에는 집합이 이미 구현되어 있기 때문에 가져다 쓸 수 있다.#include 집합에 입력받은 수들을 넣었다가 출력해주기만 하면 되는데, set은 기본적으로 원소를 넣을 때마다 정렬되어서 삽입되므로 정렬해줄 ..
·AI
험한 것이 나왔다...자비스 콜링 바로 며칠 전인 5월 13일에 OpenAI가 또 새로운 GPT모델을 발표했다. https://openai.com/index/hello-gpt-4o/ 페이지에 들어가면 시연 영상도 다양하게 볼 수 있다.영상을 보면 이번 모델 GPT-4o는 단순히 입력한 Text에 대한 답을 내놓는 수준은 아득히 넘어서서 카메라 너머의 세상을 보고, 말을 듣고 이를 바탕으로 말을 한다. 근데 말할 때 악센트나 중간중간 웃는거나 뭔 가위바위보 심판까지 봐주는거 보면 그냥 사람이랑 영상통화하는걸로 보인다. 이걸 어떻게 했지... 물론 우리가 사용하면 소개 영상처럼은 안될거 같다. 나도 이미지 생성형 AI에서 소개 페이지 결과물만 보고 현혹돼서 몇 번 더 사용해봤다가 실망 정말 많이 했었던 경..
https://www.acmicpc.net/problem/10282 코드from heapq import heappop, heappushimport sysinput = sys.stdin.readlinefor _ in range(int(input())): n, d, c = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(d): a, b, s = map(int, input().split()) heappush(graph[b], (s, a)) # Dijkstra dist = [int(1e9)] * (n+1) dist[c] = 0 hq = [(0, c)] while..
https://www.acmicpc.net/problem/4097 코드from sys import stdininput = stdin.readlinewhile True: n = int(input()) if n == 0: break p = [int(input()) for _ in range(n)] ans = 0 dp = [0]*n for i in range(n): dp[i] = max(dp[i-1]+p[i], p[i]) # 계속 이어나가기 vs 새로운 시작 print(max(dp)) dp[i]에는 i번째 원소까지 확인했을 때, 마지막 원소(i번째)가 포함된 부분 배열 중 가장 합이 큰 부분 배열의 합이 저장된다. 그러므로 dp[i]에는 계속 이..