본문 바로가기

반응형

전체

[BOJ 5821] 쌀 창고 [문제] www.acmicpc.net/problem/5821 5821번: 쌀 창고 첫째 줄에 R, L, B가 주어진다. 둘째 줄부터 R개 줄에는 X[i]가 주어진다. (1 ≤ R ≤ 100,000, 1 ≤ L ≤ 1,000,000,000, 0 ≤ B ≤ 2,000,000,000,000,000) www.acmicpc.net [난이도] - Platinum 4 (solved.ac 20.10.29 기준) [필요 개념] - 이분 탐색 (Binary Search) - 누적 합 (Prefix Sum) [풀이] 각 논들이 일직선상에 주어져 있고, 해당 논을 수확하기 위해서는 쌀 창고와의 거리만큼 비용이 필요하다. 지불할 수 있는 비용 한도가 정해져 있고, 한도 내에서 쌀 창고의 위치를 잘 정해줘서 수확할 수 있는 최대..
[BOJ 2672] 여러 직사각형의 전체 면적 구하기 [문제] www.acmicpc.net/problem/2672 2672번: 여러 직사각형의 전체 면적 구하기 첫째 줄에 직사각형의 개수 N(1 ≤ N ≤ 30)이 주어지고 그 다음 N줄에는 각각의 직사각형에 대한 자료가 주어진다. 이 자료는 4개의 숫자로 표시되는데 첫째, 둘째 숫자는 직사각형의 왼쪽 아래 모 www.acmicpc.net [필요 개념] - 스위핑 (Sweeping) [난이도] - Gold 2 (solved.ac 20.10.29 기준) [풀이] N의 크기가 작아서 여러 풀이 방법이 가능하지만, 대체로 이런 유형은 '스위핑'으로 풀리는 경우가 많다. 우선, 주어지는 입력이 조금 특이한데 알고 보면 크게 다르지 않다. 각 사각형의 왼쪽 아래 꼭짓점의 좌표와 사각형의 폭, 높이가 소수로 주어진다...
[분할 정복] L-트로미노(L-Tromino) 타일링 1. 트로미노란? 트로미노(Tromino)란, n=3인 폴리오미노(polyomino)로, 크기가 같은 정사각형 3개를 변끼리 붙여 만든 다각형이다. 따라서 다음과 같이 두 개의 트로미노가 존재할 수 있다. 2. $2^n$ x $2^n$ L-트로미노 타일링 이제, 이 트로미노중에서 일자형이 아닌 L 모양의 트로미노를 한 변의 길이가 $2^n$인 정사각형에 배치하는 것이 목표이다. 결론부터 말하자면, L-트로미노는 1x1 한 칸을 제외하고, 한 변의 길이가 $2^n$인 정사각형을 항상 채울 수 있다. 증명은 다음과 같이 수학적 귀납법으로 가능하다. [정리] $2^n$ X $2^n$ 크기의 정사각형에 1x1 한 칸을 제외하고 항상 L-트로미노로 모두 채울 수 있다. [증명] 1. n = 1일 때 n = 1인 ..
비트마스크 (BitMask) 알고리즘 [목차] 1. 비트마스크(BitMask)란? 2. 비트마스크의 장점 3. 비트 연산자 4. 비트마스크를 이용한 집합 구현 * 종만북에 잘 설명되어 있어 기본적으로 종만북의 설명을 따릅니다. 1. 비트마스크(BitMask)란? - 비트마스크(BitMask)는 이진수를 사용하는 컴퓨터의 연산 방식을 이용하여, 정수의 이진수 표현을 자료 구조로 쓰는 기법을 말한다. - 이진수는 0 또는 1을 이용하므로 하나의 비트(bit)가 표현할 수 있는 경우는 두 가지이다. - 보통 어떤 비트가 1이면 "켜져 있다"라고 말하며, 0이면 "꺼져 있다"라고 말한다. 2. 비트마스크의 장점 비트마스크는 크게 어려운 개념이 아니며, 이 개념을 알고 있다면 매우 유용한 경우가 꽤나 있다. 비트마스크의 장점들은 다음과 같다. 1. ..
코포 블루 달성...! 드디어 목표였던 블루를 달성했다.... 물론 아직도 갈 길이 멀지만, 본격적인 PS공부 시작 후 이거 하나 찍는데 장장 6개월이 걸렸다. 과정이 순탄하지 않았기에 후기를 쓴다면 꽤나 길 것 같아서 추후에 따로 글을 쓰려고 한다.
2020년 9월 공부일지 [푼 문제] 1. BOJ 63문제 (659 solved) 2. Codeforces 13회 참여 (Rating 625 -> 1485) - Round #667 (Div. 3) / Round #668 (Div. 2) / Round #669 (Div. 2) / Round #670 (Div. 2) / Educational Round 95 / Round #671 (Div. 2) / Round #672 (Div. 2) / Round #673 (Div. 2) / Round #674 (Div. 2) - Virtual participation : Round #671 (Div. 2) / Round #613 (Div. 2) / Round #643 (Div. 2) / Round #616 (Div. 2) 3. Atcoder 2회..
최소 / 최대 맨해튼 거리 (Manhattan Distance) 1. 맨해튼 거리(Manhattan Distance)란? 우리가 일상생활에서, 또는 일반적으로 사용하는 거리는 '유클리드 거리'이다. 편의상 2차원 평면 (x축, y축)이라고 하자. 두 점 $ (x1, y1) $, $ (x2, y2) $ 사이의 거리를 구한다고 할 때, 우리가 일반적으로 이용해왔던 $\sqrt{(x1 - x2)^2 + (y1-y2)^2}$ 로 구하는 거리가 유클리드 거리이다. 반면, 맨해튼 거리(Manhattan Distance)는 각 좌표의 차를 모두 더한 것을 거리로 한다. 즉, $ \left | x1 - x2 \right | + \left | y1 - y2 \right | $ 가 두 점 $ (x1, y1) $, $ (x2, y2) $ 사이의 맨해튼 거리이다. 일상생활에서는 잘 이용되..
완전 탐색 (Brute-Force Search / Exhaustive Search) 알고리즘 1. 완전 탐색이란? 컴퓨터의 빠른 계산 능력을 이용하여 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미한다. '무식하게 푼다'라는 의미인 Brute-Force (브루트 포스)라고도 부른다. 이름이 거창하게 지어져 있지만 사실 완전 탐색 자체로는 알고리즘이라고 부르긴 그렇고, 문제 푸는'방법'이라고 이해하면 편할 것 같다. 알고리즘을 모르는 사람이 프로그래밍 문제를 푼다면, 당연히 가능한 모든 경우들을 다 구해서 그중에 만족하는 답을 찾아낼 것이고 이 과정 자체가 완전 탐색이다. 대신에 이 방식은 절대 답을 못 구하는 경우는 없으므로 나름 강력한 방법이다. 예를 한번 들어보자. "10개의 정수 원소로 이루어진 수열이 있다. 이 수열에서 두 원소를 선택해서 구한 합의 최댓값을 구하시오. " 이..