본문 바로가기

전체 글100

백준 11505 - 구간 곱 구하기 (Python3) https://www.acmicpc.net/problem/11505💡 해결방법구간 곱을 다루는 세그먼트 트리를 구현해서 문제 해결👀 풀이세그먼트 트리로 초기화하는 메서드기존 값을 변경해주는 메서드입력된 구간 내의 곱을 반환하는 메서드를 구현하여 정해진 쿼리를 처리한다.특징으로는 기존 값을 원래는 내려가면서 업데이트를 했다면, 이번에는 말단 노드에서 시작해서 루트 노드까지 올라오며 update를 한다.🧾코드import sysinput = sys.stdin.readlinemod_value = 10**9+7N, M, K = map(int, input().split())arr = [int(input()) for _ in range(N)]tree = [0] * (N*4)def init(start, end, .. 2025. 3. 31.
[G1] 백준 2042 - 구간 합 구하기 (Python3) https://www.acmicpc.net/problem/2042💡 해결방법세그먼트 트리를 구현하고 정해진 명령어대로 수행한다.🧾코드# 2042 구간 합 구하기import sysinput = sys.stdin.readlineN, M, K = map(int, input().split())arr = [int(input()) for _ in range(N)]tree = [0] * (N*4)def init(start, end, idx): if(start == end): tree[idx] = arr[start] return tree[idx] mid = (start+end) // 2 tree[idx] = init(start, mid, idx*2) + init(mid+1,.. 2025. 3. 29.
Segment Tree(세그먼트 트리) (Python3) 세그먼트 트리란?세그먼트 트리는 구간의 정보를 알고 싶을 때 사용하는 트리입니다.각 노드는 자식 노드의 정보를 연산한 값을 저장하고 있습니다. 이 특징으로 구간의 사칙연산, 최대·최솟값 등을 구할 때 자주 사용한다고 합니다. 개발자는 배열 혹은 리스트에서 부분의 합 정보를 알고 싶습니다. 그래서 선형 탐색으로 접근을 하고, 구간이 일치한다면 그 정보들을 하나하나 가져옵니다. 이것은 구현이 쉬우나, O(N)의 비용이 발생합니다. 세그먼트 트리의 노드는 부분의 정보를 저장하고 있습니다.말단 노드(leaf node)에 접근하면, 배열의 원소 값과 일치합니다.하지만 말단 노드의 부모 노드 부터는, 자식 노드의 정보를 합한(혹은 빼거나 곱하는 등) 값을 저장하고 있습니다.그래서 필요한 구간의 노드를 찾아내면 원하.. 2025. 3. 29.
마인크래프트 블랙잭 플러그인 v - 1.0 버전 정보마인크래프트 1.21.4버전 | paper 서버 (  version 1.21.4-187 )에서 개발2025-03-22    v - 1.0 실행 화면명령어 : /startblackjacksingle 문제점혼자 개발하다보니 멀티플레이어 모두 게임 진행이 동일하게 적용되는지 확인하지 못함.(그래서 single과 multy를 구분)  -> 버그 가능성 ↑ ↑ ↑예상되는 문제 : Gamedeck에서 중복된 카드를 가져감 or 딜러 카드가 모두 다르게 나타남하면 좋아 보이는 업데이트무언가(다이아, 에메랄드 등)을 걸고 게임할 수 있게 npc 추가게임화면을 닫으면 다시 돌아갈 방법이 없음 -> npc 추가해서 진행 내용을 저장하여 중간에 이탈해도 진행화면을 볼 수 있게 설정모든 플레이어가 stand 및 버스.. 2025. 3. 23.
[G5] 백준 2225 - 합분해 (python3) https://www.acmicpc.net/problem/2225💡 해결방법1차원에선 점화식이 보이지 않아서 2차원 grid에서 접근했다.별다른 해결방법이 있던게 아니라 모든 경우의 수를 보고나면 규칙이 보일까 해서였다.운이 좋게 해결할 수 있던 문제다. 아래는 dp table을 채우기 위해 완전탐색을 하는 코드다.dp[n][k] = n을 k개의 합으로 구하는 방법#2225 합분해 dp table 테스트import syssys.setrecursionlimit(10**5)n, k = map(int, input().split()) dp = [[0 for _ in range(k+1)] for __ in range(n+1)]for i in range(n+1): dp[i][1] = 1for i in .. 2025. 3. 17.
2주차 실습 - 반복문 조건문 보호되어 있는 글 입니다. 2025. 3. 16.
[G3] 백준 1520 - 내리막 (Python3) https://www.acmicpc.net/problem/1520💡 해결방법DFS + DP메모제이션DFS 만으로 풀면 시간초과or메모리초과DP 만으로 풀면 메모리초과처음엔 상하좌우가 아니라 [좌,우,아래]로만 움직일 수 있는 줄 알고 O(N^3) 풀이를 준비했던,, (0,0)에서 (r-1, c-1) 위치로 이동하는 경우의 수를 구하는 문제이다.이동 조건은 상하좌우 다 되고, 대신 grid의 현재위치의 높이가 이동하려는 위치의 높이보다 높아야 된다.처음 접근했던 방법이다.목적지(10)에서 목적지로 가는 방법은 0개라고 가정하고, 목적지에서 상하좌우에 자기 높이보다 높은 숫자로 이동하면서 {현재 방법 + 1}로 두는 방법으로 접근을 했다. 하지만 결국 그냥 dfs로 푸는 것과 별 차이가 없었다. 아싸리 그.. 2025. 3. 10.
[G5] 백준 2230 - 수 고르기 (Python3) https://www.acmicpc.net/problem/2230💡 해결방법A 배열에 입력받은 원소들을 정렬하면 이 문제를 쉽게 풀 수 있다.항상 차이가 M이상인 두 수를 고를 수 있다.A 배열을 정렬하면, 투포인터를 적용할 수 있기 때문이다.투포인터는 정렬된 배열에서 순차적으로 접근할 때 적용할 수 있는 알고리즘이다.🧾코드# 2230 수 고르기N, M = map(int, input().split())arr = [int(input()) for _ in range(N)]arr.sort()l, r = 0, 0ans = float('inf')while l = M: l += 1 ans = min(ans, differ)print(ans) 2025. 3. 1.