baekjoon
-
[백준] 24090번 알고리즘 수업 - 퀵 정렬 1(python)Python/BAEKJOON 2023. 7. 2. 16:02
문제) 알고리즘) - 문제에서 퀵 정렬에 대한 기본 틀이 주어져있습니다. 이를 기반으로 코드를 작성 - 여기서 pivot는 배열의 맨끝 데이터를 기준으로 진행 - Result는 입력으로 주어진 c에 해당하는 교환 데이터를 출력하는 것 입니다. - 교환이 이루어지는 부분마다 조건문으로 cnt와 c를 비교해서 빠져나오게 구성합니다. * 재귀 알고리즘이 포함하는 문제에서는 재귀의 깊이를 설정하는 코드를 필수로 해주셔야합니다. pypy에서는 딱히 하지 않아도 됩니다. sys.setrecursionlimit(int(1e6)) 코드) #알고리즘 수업 - 퀵 정렬 1 import sys sys.setrecursionlimit(int(1e6)) #재귀 깊이제한 input = sys.stdin.readline def p..
-
[백준] 21921번 블로그(python)Python/BAEKJOON 2023. 1. 2. 23:23
문제) 알고리즘) - 시간복잡도를 생각하지 않고 문제를 본다면 대부분 for문과 sum 함수를 반복해서 사용해서 코드를 짜면 될 것 같지만 예시) for i in range(N-X+1): #윈도우의 크기와 graph의 크기를 고려해서 움직일 수 있는 횟수만큼 반복 now = sum(graph[i:i+X]) #매번 sum함수로 해당 윈도우안에 해당하는 값 sum 이 경우 시간복잡도에서 걸리게 되어 시간초과가 됩니다.(for문과 sum 동시에 반복시 n^2의 시간복잡도 갖는다 최악!!) - 핵심은 이름 그대로 Sliding Window처럼 지나가면서 윈도우에서 벗어나는 값은 빼고 새로 들어오는 값 더하기 start += graph[i] #들어오는 값 start -= graph[i-X]빠져나가는 값 코드) #..
-
[Softeer] 소프티어 강의실 배정(python)Python/Softeer 2022. 8. 15. 16:58
문제) 알고리즘) * 해당문제는 백준에 "회의실 배정"이란 이름의 문제 비슷합니다. - 목표는 가장 많이 강의실 배정을 하는 것 - 처음에는 sorted, lambda를 사용하여 진행했으나 시간 초과!! - heapq를 사용하여 각 입력시간에서 fin시간이 이른 시간부터 정렬 - 그후 기준점 과 수업 시작시간과 비교하여 사용가능하다면 cnt하고 v를 해당 start로 갱신 이를 입력부에서 받은 모든 값을 돌리고 최종 cnt 출력 코드) import sys import heapq input = sys.stdin.readline n = int(input()) time = [] w = 0 #기준 cnt = 0 #강의실 수 카운트 for _ in range(n): start, fin = map(int, inpu..
-
[백준] 2667번 단지번호붙이기(python)Python/BAEKJOON 2022. 6. 22. 00:19
문제) 알고리즘) -그래프의 대표적인 bfs 활용 - bfs탐색을 통해 이어져 있는 단지의 크기와 개수를 출력하는 것 - 방문처리는 1 => 0으로 변환하며 처리 코드) #단지번호붙이기 import sys input = sys.stdin.readline n = int(input()) g = [] size = [] move_x = [-1, 0, 1, 0] move_y = [0, -1, 0, 1] for _ in range(n): g.append(list(map(int, input().strip()))) def dfs(y,x): global cnt #단지별 사이즈 if x = n or y = n: #범위밖 조선 return 0 if g[y][x] == 1: #확인된 자리 g[y][x] = 0 cnt += 1..
-
[백준] 11047번 동전 0(python)Python/BAEKJOON 2022. 3. 26. 17:26
문제) 알고리즘) 그리디 알고리즘 대표적인 문제 -동전을 내림차순으로 정렬 -큰값부터 차례로 나눠준다 (나눌때 몫을 카운트) 동전 수 출력 코드) #다시 풀이 # 동전0 import sys from collections import deque input = sys.stdin.readline cnt, price = map(int, input().split()) result = 0 coin = [] for _ in range(cnt): coin.append(int(input())) coin.sort(reverse= True) coin = deque(coin) while coin: current = coin.popleft() if current > price: continue result += (price//..
-
[백준] 1057번 토너먼트(python)Python/BAEKJOON 2022. 3. 26. 17:15
문제) 알고리즘) 풀이 핵심) - 토너먼트의 특징을 잘 생각해보자 풀이) -주어지는 두값은 무조건 생존 -각 라운드마다 절반으로 감소한다 ex) f_1 20 10 5 2 1 f_2 31 15 7 3 1 해당 사이클로 만나게 되는 라운드 값 출력 코드) #토너먼트 import sys input = sys.stdin.readline n, f_1, f_2 = map(int ,input().split()) cnt = 0 while f_1 != f_2: f_1 -= f_1//2 f_2 -= f_2//2 cnt += 1 print(cnt)
-
[백준] 2579번 계단오르기(python)Python/BAEKJOON 2022. 3. 26. 16:46
문제) 알고리즘) DP 계단의 수가 3개미만 일 경우 총 합이 최종 값이다. 그외) n번째에 해당 계단마다 갈 수 있는 최댓값을 d[n]에 할당 한다. 해당 사이클을 반복 후 출력을 원하는 위치의 계단 값을 출력이 바로 최댓값이다. 코드) #계단오르기 import sys n = int(sys.stdin.readline()) #계단 갯수 stair = [] #계단 저장 for _ in range(n): #N개만큼 계단 생성 stair.append(int(sys.stdin.readline())) d = [0]*n #계단 갯수만큼 확보 d[0] = stair[0] if n
-
[백준] 1012번 유기농 배추(python)Python/BAEKJOON 2022. 3. 16. 20:19
문제) 알고리즘) 그래프 목표: 농장에서 배추가 있는 구역의 수 구하기 입력부 이후 -배추의 위치를 찾고 그로부터 인접한 배추 위치 파악 현재 위치에서 십자가 형태로 탐색 반복문에서 빠져나오면 +1 => 반복문 탈출 인접해 있는 배추 한 구역을 모두 탐색한 것 최종적으로 result 출력 배추의 구역 수 코드) #유기농 배추 import sys from collections import deque input = sys.stdin.readline move_row = [0, 1, 0, -1] move_col = [-1, 0, 1, 0] def bfs(row, col, graph): d = deque() d.append([row,col]) graph[row][col] = 0 while d: x,y = d.po..