목록Baekjoon (141)
홍우진의 개발 일기장
문제 링크https://www.acmicpc.net/problem/2740 풀이 코드import sysinput = sys.stdin.readlinen, m = map(int,input().split())a = [list(map(int,input().split())) for i in range(n)]m, k = map(int,input().split())b = [list(map(int,input().split())) for i in range(m)]for i in range(n): result = [] for j in range(k): x = 0 for l in range(m): x += a[i][l] * b[l][j] result.ap..
문제 링크https://www.acmicpc.net/problem/4659풀이 코드while True: password = input() if password == 'end': break mopo = 'aeiou' acceptable = True if not any(x in password for x in mopo): # 모음 하나 포함 acceptable = False mo, ja = 0, 0 for i in password: if i in mopo: mo += 1 ja = 0 else: mo = 0 ja..
문제 링크https://www.acmicpc.net/problem/10431풀이 코드p = int(input())for _ in range(p): ki = list(map(int,input().split())) tot = 0 for i in range(1,len(ki)-1): for j in range(i+1,len(ki)): if ki[i] > ki[j]: ki[i],ki[j] = ki[j],ki[i] tot += 1 print(ki[0], tot) 코드 해석더블 정렬을 이용하여 풀었다.https://wikidocs.net/233706 체감 난이도: ★★☆☆☆ 5-01. Sort : Bubble..
문제 링크https://www.acmicpc.net/problem/2805풀이 코드n, m = map(int, input().split())namu = list(map(int, input().split()))start = 1end = max(namu)while start = mid: # 나무의 길이가 중간값보다 높다면 tot += i - mid # 자른 값을 더한다. if tot >= m: # 총 자른 값이 필요한 값보다 많다면 start = mid + 1 # 시작점을 중간값+1로 설정한다. else: end = mid - 1 # 아니라면 끝나는점을 중간값-1로 설정한다. print(end) 코드 해석그냥 했더니 시간 초과..
문제 링크https://www.acmicpc.net/problem/11279풀이 코드import heapqimport sysinput = sys.stdin.readline()n = int(input())max = []for _ in range(n): number = int(input()) if number > 0: heapq.heappush(max, -number) else: if not max: print(0) else: print(-heapq.heappop(max)) 코드 해석파이썬의 heap 모듈을 사용하여 풀이한다.만약 받은 수가 0보다 클 경우heap에 값을 -화 하여 집어넣는다(최대 힙 구현)출력시에는..
문제 링크https://www.acmicpc.net/problem/1912 풀이 코드n = int(input())su = list(map(int,input().split()))for i in range(1, n): su[i] = max(su[i], su[i-1] + su[i])print(max(su)) 코드 해석리스트 속의 현재 값과 지금까지 더한값을 비교하여더 큰 수를 현재 값으로 지정하며 나아간다. 최종적으로 리스트 속에 남아있는 값들 중 가장 큰 값을 출력한다. 체감 난이도: ★★★☆☆
문제 링크https://www.acmicpc.net/problem/1904풀이 코드n = int(input())dp = [1] * nfor i in range(1,n): dp[i] = (dp[i-1] + dp[i-2]) % 15746print(dp[-1])코드 해석경우의 수를 살펴보면1 자릿수 일 땐 1 1개2 자릿수 일 땐 00,11 2개3 자릿수 일 땐 001,100,111 3개4 자릿수 일 땐 0000,0011,1001,1100,1111 5개5 자릿수 일 땐 00001,00100,00111,10000,10011,11001,11100 8개 어라...?피보나치수열이랑 똑같잖아? 그래서 DP를 사용한 피보나치수열로 풀었다.점화식은 dp[i] = dp[i-1] + dp[i-2]이다. htt..
문제 링크https://www.acmicpc.net/problem/10448풀이 코드t = [n*(n+1)//2 for n in range(1, 46)]dap = [0] * 1001for i in t: for j in t: for k in t: if i+j+k 코드 해석수를 미리 구해놓은 뒤 푸는 방식을 사용하였다. 체감 난이도: ★☆☆☆☆