FickleBoBo
Preview Image

[자료구조/알고리즘] 슬라이딩 윈도우 (Sliding Window)

1. 슬라이딩 윈도우 슬라이딩 윈도우(Sliding Window)는 배열이나 리스트와 같은 데이터 구조에서 연속된 부분 배열의 합이나 애너그램(Anagram) 등을 효율적으로 계산하는 데 사용되는 일종의 테크닉이다. 주로 고정된 크기의 윈도우(Window)를 활용하여 데이터를 처리하며 이 과정에서 반복적인 계산을 줄여 시간복잡도를 낮출 수 있다....

[BaekJoon] 19645번 - 햄최몇? [Java][C++]

문제 링크 1. 문제 풀이 주어진 햄버거를 적절하게 분배하여 길원이가 선배들보다 효용이 높지 않으면서 최대 효용을 얻어야 하는 문제다. 먼저 주어진 햄버거의 효용의 합을 구해 변수로 저장한다. 이후 2차원 방문 체크 배열을 활용해 행 인덱스와 열 인덱스가 각각 선배들이 먹은 햄버거의 효용의 합이 되게 하면 방문 체크 시 길원이가 먹은 햄버거...

[BaekJoon] 1801번 - 직사각형 만들기 [Java][C++]

문제 링크 1. 문제 풀이 주어진 막대를 이어 붙이는 것이 가능할 때 만들 수 있는 가장 큰 직사각형의 넓이를 구하는 문제다. $N$ 이 꽤 작긴하지만 각 변에 어떤 막대를 배치할지 찾는 단순한 완전탐색으로는 $O(5^N)$ 이라서 어렵다.(네 변 + 안 고르기로 총 5가지 선택지) 해당 문제는 4차원 dp를 활용해서 직사각형의 왼쪽 변은...

[BaekJoon] 13909번 - 창문 닫기 [Java][C++]

문제 링크 1. 문제 풀이 $1$ 부터 $N$ 까지 각 수의 배수 번째 창문의 상태를 바꿀 경우 열린 창문의 개수를 구하는 문제로 임의의 $M$ 번 창문에 대해 해당 창문을 열거나 닫을 수 있는 수는 $M$ 의 약수들만 가능하다. 처음에 모든 창문이 닫혀 있으므로 창문이 열려있으려면 약수의 개수가 홀수이면 되며 약수의 개수가 홀수인 수는 $...

[Programmers] 42576번 - 완주하지 못한 선수 [Java][C++]

문제 링크 1. 문제 풀이 participant에서 completion를 뺀 한 명의 선수를 찾는 문제로 해시맵을 활용하면 해결할 수 있다. 이름이 중복인 선수가 없다면 해시셋을 사용하면 되지만 이름이 중복될 수 있기에 key에 선수 이름, value에 해당 선수의 수를 저장한 해시맵으로 참여한 선수 정보를 먼저 저장 후 완주한 선수 정보를...

[BaekJoon] 7785번 - 회사에 있는 사람 [Java][C++]

문제 링크 1. 문제 풀이 회사에 들어온 사람은 "enter", 회사에서 나간 사람은 "leave" 로 주어지는 문제로 회사에 들어왔으면 집합에 넣고, 회사에서 나갔으면 집합에서 제거해주면 된다. 회사에 있는 사람의 이름을 사전 순의 역순으로 출력해야 해서 트리셋을 집합으로 활용했고 역순으로 설정해줬다. 2. 코드 1. 풀이 [J...