목록Python (288)
홍우진의 개발새발
문제 링크https://www.acmicpc.net/problem/1758풀이 코드n = int(input())tip = sorted([int(input()) for _ in range(n)], reverse=True)mon = 0for i in range(n): if tip[i] - i > 0: mon += tip[i] - iprint(mon)코드 해석그리디 알고리즘을 사용하면 간단하다.가장 돈 많은 사람을 앞에 세우면 된다👍 체감 난이도: ★☆☆☆☆
문제 링크https://www.acmicpc.net/problem/28432풀이 코드import sysinput = sys.stdin.readlinegirok = [input().strip() for _ in range(int(input()))]who = [input().strip() for _ in range(int(input()))]q = girok.index('?')used = set(girok)used.remove('?')start = girok[q - 1][-1] if q > 0 else Noneend = girok[q + 1][0] if q 코드 해석문자열을 슬라이싱 해서 끝말잇기 조건에 맞추면 된다. 체감 난이도: ★★☆☆☆
문제 링크https://www.acmicpc.net/problem/1418풀이 코드import sysN = int(sys.stdin.readline())K = int(sys.stdin.readline())max_prime_factor = [0] * (N + 1)for i in range(2, N + 1): if max_prime_factor[i] == 0: for j in range(i, N + 1, i): max_prime_factor[j] = icount = 0for i in range(1, N + 1): if max_prime_factor[i] 코드 해석에라토스테네스의 체를 사용했다.http://gliver.tistory.com/8 [03강] 에라토스테네스..
문제 링크https://www.acmicpc.net/problem/20044풀이 코드import sysn = int(sys.stdin.readline())skills = list(map(int, sys.stdin.readline().split())) skills.sort()min_max_skill = float('inf')for i in range(n): team_skill = skills[i] + skills[2 * n - 1 - i] if team_skill 코드 해석그리디 알고리즘을 사용한다.먼저 모든 학생의 코딩 역량을 오름차순으로 정렬한다.정렬된 리스트에서 가장 앞에 있는 학생(역량이 가장 낮은 학생)과가장 뒤에 있는 학생(역량이 가장 높은 학생)을 짝지어 팀을 만든다.그 다음으..
문제 링크https://www.acmicpc.net/problem/20920풀이 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())word_counts = {}for _ in range(n): word = input().strip() if len(word) >= m: word_counts[word] = word_counts.get(word, 0) + 1sorted_words = sorted(word_counts.keys(), key=lambda x: (-word_counts[x], -len(x), x))for word in sorted_words: print(word)코드 해석효율적인 단어 수 계산과..
문제 링크https://www.acmicpc.net/problem/19941풀이 코드import sysinput = sys.stdin.readlinen, k = map(int, input().split())table = list(input().strip())eaten = [False] * ncount = 0for i in range(n): if table[i] == 'P': for j in range(max(0, i - k), min(n, i + k + 1)): if table[j] == 'H' and not eaten[j]: eaten[j] = True count += 1 breakpr..
문제 링크https://www.acmicpc.net/problem/15719풀이 코드from sys import stdindef read(): while 1: # 1. 표준 입력을 100,000 바이트씩 잘라서 읽음 s = stdin.read(100000) if not s: return # 2. 혹시 숫자 중간에 잘렸을 경우, 공백이 나올 때까지 마저 읽음 while s[-1] != ' ': extra = stdin.read(1) if not extra: break s+= extra # 3. 잘라낸 부분만 split해서 숫자를 하나씩 반환 (yield) ..
문제 링크https://www.acmicpc.net/problem/2075풀이 코드import heapqimport sys# 빠른 입력을 위해 sys.stdin.readline 사용input = sys.stdin.readlinen = int(input())# 최소 힙으로 사용할 리스트min_heap = []# N x N 행렬의 모든 수를 순회for _ in range(n): # 한 줄씩 입력받아 처리 (메모리 절약) numbers = map(int, input().split()) for num in numbers: # 힙의 크기가 N보다 작으면 그냥 추가 if len(min_heap) min_heap[0]: # heappushpop: ..