Algorithm 87

항해99 리부트코스 알고리즘 2주 3일차 백준 1181 단어 정렬

https://www.acmicpc.net/problem/1181    단어 목록이 주어졌을 때, 단어를 정렬하는 프로그램을 작성정렬 기준은 두 가지다길이가 짧은 것부터길이가 같으면 사전 순으로  즉,  주어진 단어 목록에서 중복을 제거중복이 제거된 단어 목록을 정렬(정렬의 기준은 단어의 길이, 단어 자체) 해야 한다.   1.단어 목록을 입력받고2.중복을 제거3.정렬된 단어 목록을 출력 순으로 코드를 작성해보자  import sysinput = sys.stdin.read# 입력 받기data = input().split()n = int(data[0])words = data[1:]# 중복 제거unique_words = list(set(words))# 정렬unique_words.sort(key=lambda ..

Algorithm/백준 2024.07.26

항해99 리부트코스 알고리즘 2주 3일차 백준 18870 좌표 압축

https://www.acmicpc.net/problem/18870  주어진 좌표 리스트에서 각 좌표를 압축하여 새로운 좌표 리스트를 만듦압축된 좌표는 각 좌표의 크기 순서에 따라 번호를 매기는 방식예, 주어진 좌표가 [2, 4, -10, 4, -9]라면, 이 좌표를 크기 순으로 정렬하면 [-10, -9, 2, 4, 4]가 된다. 이때 압축된 좌표는 [2, 4, 0, 4, 1]입니다.접근 방법 주어진 좌표 리스트에서 중복을 제거하고 정렬하여 순위를 매긴다원래 좌표 리스트에서 각 좌표의 압축된 값을 찾는다. 즉, 이를 순서대로 구체적으로 표현하면 다음과 같다.  좌표 리스트를 입력받는다중복을 제거한 후 정렬된 좌표 리스트를 만든다정렬된 좌표 리스트를 이용해 각 좌표의 압축된 값을 딕셔너리에 저장원래 좌표 ..

Algorithm/백준 2024.07.26

항해99 리부트코스 알고리즘 2주 3일차 백준 1946 신입 사원

https://www.acmicpc.net/problem/1946   풀이 문제의 핵심은 두 가지 성적 중 하나라도 다른 지원자보다 떨어지면 선발되지 않는다는 점이다 각 지원자는 두 가지 성적(서류 심사 성적, 면접 성적)을 가지고 있음한 가지 성적이라도 다른 지원자보다 떨어지지 않으면 선발  문제 해결 전략정렬: 서류 심사 성적을 기준으로 지원자들을 오름차순으로 정렬최소 면접 성적 갱신: 서류 심사 성적이 낮은 순서대로 면접 성적을 확인하면서, 현재까지의 최소 면접 성적을 갱신선발 기준: 현재 면접 성적이 최소 면접 성적보다 좋다면 그 지원자는 선발. 예를 들어, 지원자가 5명이고 서류 심사 및 면접 성적이 다음과 같다 (참고로 숫자는 순위임에 유의, 헷갈리지말자) 서류 심사               ..

Algorithm/백준 2024.07.26

항해99 리부트코스 알고리즘 2주 3일차 백준 1026 보물

https://www.acmicpc.net/problem/1026  풀이  배열 A와 배열 B를 세팅배열 A는 오름차순으로 정렬하고, 배열 B는 내림차순으로 정렬배열 A와 배열 B의 요소를 순서대로 곱하여 그 합을 구한다 import sysinput = sys.stdin.read# 입력 받기data = input().split()n = int(data[0])A = list(map(int, data[1:n+1]))B = list(map(int, data[n+1:2*n+1]))def minimum_sum(A, B): # A는 오름차순으로 정렬 A.sort() # B는 내림차순으로 정렬 B.sort(reverse=True) # 두 배열의 요소를 곱한 후 합산 result = s..

Algorithm/백준 2024.07.26

항해99 리부트코스 알고리즘 2주 2일차 백준 14235 크리스마스 선물

https://www.acmicpc.net/problem/14235   풀이import heapqimport sysinput = sys.stdin.readlinedef main(): n = int(input().strip()) # 명령의 개수 N을 입력받음 max_heap = [] # 빈 리스트를 최대 힙으로 사용 for _ in range(n): command = list(map(int, input().strip().split())) if command[0] == 0: # 선물을 받아야 하는 경우 if max_heap: # 힙이 비어있지 않으면 가장 큰 선물 출력 후 제거 ..

Algorithm/백준 2024.07.25

항해99 리부트코스 알고리즘 2주 2일차 백준 1927 최소 힙

https://www.acmicpc.net/problem/1927    import sys import heapq input = sys.stdin.readlinedef main(): n = int(input().strip()) min_heap = [] # 빈 리스트를 최소 힙으로 사용 for _ in range(n): x = int(input().strip()) # 각 명령을 입력받음 if x == 0: if min_heap: # 힙이 비어있지 않으면 최소 값을 출력하고 힙에서 제거 print(heapq.heappop(min_heap)) else: ..

Algorithm/백준 2024.07.25

항해99 리부트코스 알고리즘 2주 2일차 백준 19638 센티와 마법의 뿅망치

https://www.acmicpc.net/problem/19638    풀이  주어진 거인의 키들을 최대 힙(max heap)으로 관리최대 힙을 사용하여 가장 큰 거인을 찾아 뿅망치로 줄임이를 T번 반복하거나, 모든 거인의 키가 H이하가 되면 중지 import heapqimport sysinput = sys.stdin.readlinedef solve(n, h, t, giants): # 거인들의 키를 최대 힙으로 변환 (음수로 저장하여 최대 힙처럼 동작하게 함) max_heap = [-giant for giant in giants] heapq.heapify(max_heap) count = 0 # 뿅망치 사용 횟수 카운트 for _ in range(t): # 최대 T번..

Algorithm/백준 2024.07.25