전체 글 33

백준-14501-퇴사

문제 요약# N : day# T : 상담을 완료하는데 걸리는 시간# P : 상담을 했을 때 받을 수 있는 금액# N일 동안 상담을 해서 최대한 많은 이익을 얻는 방법첫 번째 구현 → 실패def dfs(시작점): # 현재 일수가 N보다 큰 상황 -> 뒤 돌아간다.(백트래킹) if 현재일수 > N: return ## dfs는 T를 기준으로 방문한 T가 N을 넘지 않으면 계속 방문 ## T를 방문하면 i + T[i] 가 되어야한다. for i in range(시작점,n+1): if visited[i] == 0: continue visited[i] = 1 # 방문처리 s.append(P[i]) # 현재..

알고리즘/백준 2024.07.14

백준-20546-기적의 매매법

구현문제에서 주어진 준현이와 성민이의 매매법을 정리하면 아래와 같다.준현이의 매매법- 한번산 주식을 절대 팔지 않는다.- 주식을 살 수 있다면 최대한 많이산다. 그리고 이후에 주식을 살 수 있다면 즉시 매수한다. 성민이의 매매법- 모든 거래는 전량 매수와 전량 매도  :: (현금 주식 살 수 없다.  (현금 > 주가) -> 최대의 수로 산다.- 3일 연속 가격이 전일 대비 상승하는 주식은 다음날 무조건 가격이 하락  :: 주식 전량 매도- 3일 연속 가격이 전일 대비 하락하는 주식은 다음날 무조건 가격이 상승  :: 주식 전량 매수 위 매매법을 직접 코드로 구현하면 아래와 같다 틀린 코드# BNF (현금, 주가)def BNP(money, price): result = 0 # 투자 후 얻은 자산 ..

알고리즘/백준 2024.07.12

백준-2839-설탕 배달

구현5kg 봉지로 최대한 담는 것이 최소의 봉지를 만드는 것이다.5kg 봉지로 한번에 담을 수 없으면 3kg 봉지로 한 번 담고 다시 5의 배수인지 확인한다.만약 5의 배수가 나오면 모두 5kg 봉지로 담아내고 프로그램 종료풀이 코드 1N = int(input())count = 0while N > 0: #5의 배수인 경우 if N % 5 == 0: count += 1 N = N - 5 #3의 배수인 경우 else: count += 1 N = N - 3if N == 0: print(count)else: print(-1)처음 풀이한 코드로는 5의 배수 혹은 3의 배수가 나올때마다 3혹은 5를 빼주는 방식으로 구현했다.하지만 5..

알고리즘/백준 2024.07.03

백준-11497-통나무 건너뛰기

구현1T = int(input())for _ in range(T): N = int(input()) L = list(map(int,input().split())) #정렬 L.sort() level = 0 for i in range(2,N): level = max(level, abs(L[i] - L[i-2])) print(level)이 방식은 대부분의 사람들이 이렇게 풀이했다.L = 2 4 5 7 9 ▶2 5 9 7 4 이렇게 변환된 것에서 인접한 값을 구하는 것은abs(L[2] - L[0]) = abs(2 - 5)abs(L[3] - L[1]) = abs(4 - 7)abs(L[4] - L[2]) = abs(5 - 9) 이와 같은 방식이기 때문에 새롭게 리스트..

알고리즘/백준 2024.07.03

백준-14502-연구소

구현import sysfrom collections import dequeinput = sys.stdin.readlinen , m = map(int, input().split())temp = [[0] * m for _ in range(n)] # 벽 설치 후의 맵# 초기 입력 받는 맵graph = []for i in range(n): graph.append(list(map(int,input().split())))#좌우 상하dx = [-1,1,0,0]dy = [0,0,-1,1]result = 0# bfs를 이용해 바이러스가 퍼지는 상황 구현def virus(x,y): queue = deque() queue.append((x,y)) while queue: a,b = queue..

알고리즘/백준 2024.07.01