Java에서 랜덤 숫자 생성하기

랜덤 숫자를 생성하는 것은 프로그래밍에서 매우 일반적인 작업입니다. Java에서는 다양한 방법으로 램덤 숫자를 생성할 수 있습니다. 아래는 세 가지 주요 방법에 대한 설명과 코드 예제입니다. 1. Math.random() 활용 Math.random() 메서드는 0.0 이상 1.0 미만의 double 값을 반환합니다. 이를 통해 특정 범위 내의 정수형 랜덤 숫자를 쉽게 얻을 수 있습니다. publ ...

7월 30일 19:30에 게시됨

이기 게임 이론: 스프래그 - 그런디 함수의 구현 및 활용

스프래그 - 그런디 (Sprague-Grundy) 함수 개요 조합론 게임 이론에서 가장 핵심적인 개념 중 하나는 스프래그 - 그런디 정리입니다. 이 정리는 임의의 공정한 게임 (Impartial Game) 을 니무 게임으로 환원하여 승패를 판별할 수 있음을 보여줍니다. 각 상태에 할당되는 값을 그런디 수 (Grundies Number), 또는 편의상 SG 값이라고 부릅니다. SG 함수의 정의는 다음과 ...

7월 30일 17:00에 게시됨

LeetCode 코딩 문제 해결 중 발생하는 흔한 오류와 해결 방법

서론 보통 LeetCode 문제를 풀 때 저는 연습장이나 로컬 에디터를 사용하지 않고 문제 페이지의 코드 편집기에서 직접 코드를 작성합니다. 이러한 방식으로 문제를 푸는 경우 유료 기능을 사용하지 않으면 예상치 못한 버그가 발생할 수 있으며, 이를 찾는 데 많은 시간이 소요됩니다. 이 글에서는 과거에 경험한 문제들을 정리하고자 합니다. 사례 1 오랜 시간 동안 문제 ...

7월 28일 19:44에 게시됨

세그먼트 트리와 바이너리 인덱스 트리 (템플릿)

세그먼트 트리 1 - 구간 연산 및 합계 이 템플릿은 구간 더하기 연산과 구간 합을 구하는 세그먼트 트리를 구현합니다. #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; typedef long long ll; int arrSize, queryCount; const int MAX ...

7월 28일 18:20에 게시됨

C++ STL 표준 알고리즘 완전 가이드

1. 비수정 시퀀스 알고리즘 이 알고리즘들은 작동하는 컨테이너의 요소를 변경하지 않습니다. 1.1 find와 find_if find(begin, end, value): value와 같은 첫 번째 요소를 찾아迭代자를 반환합니다 (찾지 못하면 end 반환). find_if(begin, end, predicate): 조건자를 만족하는 첫 번째 요소를 찾습니다. find_end(begin, end, sub_begin, sub_end): 하위 시퀀스가 마지막 ...

7월 28일 01:09에 게시됨

배열 내 132 패턴 존재 여부를 판별하는 효율적인 알고리즘

132 패턴 문제의 이해 배열 nums가 주어졌을 때, i < j < k 인덱스 순서를 만족하면서 nums[i] < nums[k] < nums[j] 관계를 가지는 패턴이 존재하는지 확인하는 문제입니다. 즉, 첫 번째 숫자가 가장 작고, 두 번째 숫자가 가장 크며, 세 번째 숫자가 그 중간 값을 가지는 부분 수열을 찾아야 합니다. 1. 브루트 포스(Brute Force) 방식 가장 직관적인 방법은 ...

7월 26일 18:57에 게시됨

Codeforces 라운드 920 (Div. 3) 문제 풀이 분석

이 문서는 Codeforces Round 920 (Div. 3)의 문제 D, E, F에 대한 해결 전략과 C++ 코드 예시를 제공합니다. 문제 D: 절댓값 합 최대화 문제 설명: 두 개의 배열 A와 B가 주어졌을 때, 각 배열에서 하나의 요소를 뽑아 쌍을 이루고, 이 과정에서 만들어지는 모든 쌍의 요소들의 절댓값 차이의 합을 최대화해야 합니다. 모든 요소는 단 한 번만 사용될 수 있습니다. 해결 ...

7월 26일 06:22에 게시됨

펜윅 트리를 활용한 역쌍 계산 알고리즘

역쌍(Inversion Pair)이란 주어진 양의 정수 배열에서 인덱스 i가 j보다 작으면서 값은 a[i]가 a[j]보다 큰 경우, 즉 i < j && a[i] > a[j]를 만족하는有序对(순서쌍)를 의미한다. 这类 문제를 풀 때 가장 먼저 떠올리는 방법은 병합 정렬을 이용하는 것이다. 그러나 今回は 펜윅 트리(Fenwick Tree) 또는 BIT(Binary Indexed Tree)라는 자료구조를 활용하여 ...

7월 25일 03:34에 게시됨

다이나믹 프로그래밍 복습 노트

배낭 문제와 동적 계획법 대부분의 배낭 문제들은 01 배낭으로 변환한 후 복잡도를 최적화하는 방식으로 접근한다. 01 배낭 문제 각 물건은 선택하거나 선택하지 않는 두 가지 경우만 존재한다. 0과 1의 관계에 해당하기 때문에 01 배낭이라고 명칭한다. dp[i][j]를 앞에서부터 i개의 물건 중容量 j의 배낭이 담을 수 있는 최대 가치라고 정의하자. i번째 선택지는 i- ...

7월 24일 23:22에 게시됨

USACO 2009년 10월: 헛간 메아리 문제 풀이

문제 분석 두 개의 문자열이 주어질 때, 한 문자열의 접두사(prefix)이고 동시에 다른 문자열의 접미사(suffix)인 가장 긴 부분 문자열의 길이를 구해야 합니다. 두 방향 모두 검사해야 합니다: 첫 번째 문자열의 접두사 & 두 번째 문자열의 접미사, 그리고 첫 번째 문자열의 접미사 & 두 번째 문자열의 접두사. 핵심 아이디어 길이 k에 대해 검사할 때: 문자열 ...

7월 24일 10:29에 게시됨