728x90
반응형

BaekJoon 75

[Baekjoon 2805 / python / 실버2] 나무 자르기

import sys n, m = map(int, sys.stdin.readline().split()) # 나무의 수 / 요구 벌목량 tree = list(map(int, sys.stdin.readline().split())) # 나무 리스트 tree.sort(reverse=True) # 내림차순 정렬 (큰 나무부터) result = 0 # 이분 탐색으로 적절한 "높이"를 탐색한다 start = 1 # 최소 높이 end = max(tree) # 최대 높이 while start while문이 끝나면, 반드시 start가 end보다 1 크다 mid = (start + end) // 2 cutTree = 0 for i in tree: # 높이(mid)를 설정하고 일일이 벌목을 해본다 if i > mid: # 나..

[Baekjoon 15649 / python / 실버3] N과 M(1)

def dfs(graph, selected, m): # 숫자목록, 현재선택된숫자리스트, 모을 숫자의 개수 if len(selected) == m: # 선택된 숫자가 m개면 출력 print(*selected) # ex) [1, 2, 3] -> 1 2 3 이렇게 출력됨 return # 출력을 했으면 상위 노드로 돌아가 다른 경우의 수 찾음 for i in range(1, len(graph)): # 1부터 n까지 탐색 if not visited[i]: # 방문 안했었다면 값 추가, 이 숫자를 점유한다는 느낌 visited[i] = True # 숫자는 중복되면 안 되니까, 하위 노드에서 이 숫자를 쓰지 않도록 True로 해둔다(점유한다) selected.append(i) dfs(graph, selected, m..

Algorithm/DFS 2024.03.24

[Baekjoon 2309 / python / 브론즈1] 일곱 난쟁이

hobit = [] # 난쟁이 리스트 for _ in range(9): # 9명 입력받음 hobit.append(int(input())) kee = sum(hobit) # 9명 난쟁이 키의 합을 구해둔다 def hobit7(hobit): for i in range(len(hobit)-1): # 난쟁이 2명을 선택하는 모든 경우의 수 인덱스를 구해서 반복한다 for j in range(len(hobit)): if j > i: if kee - (hobit[i] + hobit[j]) == 100: # 난쟁이 2명을 뺀 키가 100 이라면 정답 a = hobit[i] b = hobit[j] hobit.remove(a) # 난쟁이 삭제 hobit.remove(b) hobit.sort() # 정렬 for i in ..

[Baekjoon 9663 / python / 골드4] N-Queen

n = int(input()) pos = [0] * n # 퀸 위치 담을 리스트 flag_heng = [False] * n # 행 배제 flag_a = [False] * ((n-1) * 2 + 1) # 우상향 대각 배제 flag_b = [False] * ((n-1) * 2 + 1) # 좌상향 대각 배제 count = 0 # 경우의 수 def set(i): global count for j in range(n): if not flag_heng[j] and not flag_a[i + j] and not flag_b[(n-1) + i - j]: # 행 , 대각, 대각 안전할 때 pos[i] = j # i번째 열의 j번째 행에 퀸을 둔다 if i == n - 1: # 마지막 열까지 n개의 퀸을 뒀을 때, 즉 경..

[Baekjoon 1914 / python / 실버1] 하노이 탑

n = int(input())def hanoi(no, start, end, mid): # no번 원반을 start에서 end로 옮긴다    if no == 1: # 원반이 1개라면 위에 방해되는 원반이 없으니 즉시 옮긴다        print(start, end)        return        else:        hanoi(no-1, start, mid, end) # 2개 이상이면 위에 방해되는 원반을 치운다         print(start, end) # 방해되는거 치웠으니 원래 옮기려던거 목표자리에 옮긴다        hanoi(no-1, mid, end, start) # 치워둔것도 목표자리에 옮긴다if n 20:    print(2 ** n - 1) # 최소횟수 출력    hanoi..

Algorithm/Recursion 2024.03.23

[Baekjoon 10872 / python / 브론즈3] 팩토리얼

def factorial(n): if n > 0: return n * (factorial(n - 1)) else: return 1 n = int(input()) print(factorial(n)) 팩토리얼은 n! 으로 표기하며, 1부터 n까지의 수를 곱하면 된다. 팩토리얼은 재귀함수로 표현할 수 있으며, 재귀함수는 자기 자신과 똑같은 함수를 호출하는 함수이다. 물론 팩토리얼의 구현은 재귀함수로 하지 않는 게 더 효율적이지만, 팩토리얼이 재귀함수를 호출할 때 사용되는 대표적인 예이기 때문에 재귀함수로 구현하였다.

Algorithm/Recursion 2024.03.22

[Baekjoon/JAVA] 백준 10813번 공 바꾸기

1번~N번의 바구니가 있고, 각 바구니엔 번호에 해당하는 공이 들어 있습니다. i, j번 바구니에 들어있는 공을 바꿉니다. 이것을 M번 반복한 후, 각 바구니에 몇번 공이 들어있는지 출력하는 문제입니다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); StringTokenizer st; st = new StringTokenizer(br.read..

728x90
반응형