FickleBoBo

[BaekJoon] 2629번 - 양팔저울 [Java][C++]

문제 링크 1. 문제 풀이 주어진 추들을 활용해 양팔저울에서 구슬의 무게를 측정할 수 있는지 여부를 구하는 문제다. 배낭 문제를 응용한 문제로 추들의 조합으로 특정 무게를 맞출 수 있는지 여부를 찾아야 한다. 구슬의 무게를 측정하는게 구슬 반대편에 추들을 배치하는 식으로 추들의 무게의 합으로 측정할 수도 있지만 구슬이 있는 쪽에 일부 추를 ...

[BaekJoon] 20437번 - 문자열 게임 2 [Java][C++]

문제 링크 1. 문제 풀이 주어진 문자열에 대해 특정 문자를 $K$ 개 포함하는 구간의 길이의 최솟값과 특정 문자를 $K$ 개 포함하면서 구간의 양 끝 문자가 같은 구간의 길이의 최댓값을 구하는 문제다. 각 문자의 등장 위치를 문자별로 구분해서 저장한 후 각 문자의 등장 위치들에 대한 슬라이딩 윈도우를 활용하면 해결할 수 있다. super...

[BaekJoon] 16434번 - 드래곤 앤 던전 [Java][C++]

문제 링크 1. 문제 풀이 모든 몬스터를 쓰러트리기 위한 용사의 최대 생명력을 찾아야하는 문제로 매개 변수 탐색을 활용하면 간단하게 해결할 수 있다. 주어진 던전 정보를 통해 필요한 체력을 계산하는 것이 아니라 체력의 하한과 상한을 정하고 그 중간값으로 던전을 돌아보고 안되면 체력을 증가시키고 되면 체력을 감소시켜가며 던전을 돌 수 있는 최...

[BaekJoon] 1541번 - 잃어버린 괄호 [Java][C++]

문제 링크 1. 문제 풀이 $+$, $-$, $0$ ~ $9$ 로 이루어진 문자열에서 괄호를 적절하게 쳐서 식의 최솟값을 만들어야 하는 문제로 연산자는 연속으로 두 개 이상 나타나지 않고 가장 처음과 마지막 문자는 숫자이다. 괄호를 어떻게 쳐야 식이 최솟값이 되는지가 중요한데 괄호 앞에 $-$ 가 붙으면 괄호 안의 연산자가 뒤바뀐다는게 포인...

[BaekJoon] 13448번 - SW 역량 테스트 [Java][C++]

문제 링크 1. 문제 풀이 $T$ 분 동안 $N$ 개의 문제 중 어떤 문제를 어떤 순서로 풀어야 점수가 최대가 될지 찾는 문제다. 각 문제가 주는 점수가 고정되어 있다면 0/1 배낭 문제 를 활용해서 해결할 수 있는데 문제가 주는 점수가 유동적이라서 일반적인 방법으로는 안된다. 핵심은 배낭에 담되 어떤 순서로 담아야 최댓값이 되느냐인데 $...

[BaekJoon] 1106번 - 호텔 [Java][C++]

문제 링크 1. 문제 풀이 일종의 무한 배낭 문제 로 $C$ 명 이상 확보할 수 있는 최소 비용을 찾아야 하는 문제다. 배낭을 고객으로 가치를 비용으로 설정한 배낭에서 배낭 크기가 $C$ 이상인 상황 중 배낭 가치가 최소일 때를 찾으면 된다. 이때 정확히 $C$ 명을 찾았을 때 비용이 최소가 아니라 $C$ 명 보다 큰 어느 순간 비용이 최소...