전체 글 795

백준 2161번 카드1 (JAVA)

https://www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 저는 큐를 통해 문제를 해결하였습니다. 큐를 통해 맨 위 값을 버리고 그 다음 값은 뒤로 보내면서 문제를 해결하였습니다. package BOJ.etc; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.fun..

알고리즘 2023.09.12

백준 10810번 공 넣기 (JAVA)

https://www.acmicpc.net/problem/10810 10810번: 공 넣기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. 바구니에 한 공만 넣을 수 있고, 중복되면 있는 것을 빼고 넣기에 그냥 m번 공을 넣을 때 데이터를 덮어 쓰면 된다. package BOJ.etc; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util...

알고리즘 2023.09.11

백준 14627번 파닭파닭(JAVA)

https://www.acmicpc.net/problem/14627 14627번: 파닭파닭 첫째 줄에 승균이가 시장에서 사 온 파의 개수 S(1 ≤ S ≤ 1,000,000), 그리고 주문받은 파닭의 수 C(1 ≤ C ≤ 1,000,000)가 입력된다. 파의 개수는 항상 파닭의 수를 넘지 않는다. (S ≤ C) 그 후, S 줄에 www.acmicpc.net 저는 이분 탐색을 통해 문제를 해결하였습니다. 이분 탐색을 통해 해당 값(mid)의 길이로 파를 c개 만들 수 있는지를 판단하고 할 수 있다면 start를 늘리고 못한다면 end를 줄여 문제를 해결하였습니다. package BOJ.binarysearch; import java.io.BufferedReader; import java.io.InputStr..

알고리즘 2023.09.10

백준 25416번 빠른 숫자 탐색 (JAVA)

https://www.acmicpc.net/problem/25416 25416번: 빠른 숫자 탐색 5 x 5 크기의 보드가 주어진다. 보드는 1 x 1 크기의 정사각형 격자로 이루어져 있다. 보드의 격자에는 -1, 0, 1중 하나의 숫자가 적혀 있다. 격자의 위치는 (r, c)로 표시한다. r은 행 번호, c는 열 번호 www.acmicpc.net 저는 bfs를 통해 문제를 풀었습니다. 시작 지점부터 bfs를 통해 최단 경로로 1을 만나는 시간을 찾아 문제를 해결하였습니다. package BOJ.bfs; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Qu..

알고리즘 2023.09.09

백준 5546번 파스타 (JAVA)

https://www.acmicpc.net/problem/5546 5546번: 파스타 상근이는 매일 저녁으로 파스타를 만들어 먹는다. 상근이가 만들 수 있는 파스타는 총 세 종류로 토마토 소스, 크림 소스, 바질 소스이다. 상근이는 앞으로 N일 동안 먹을 파스타를 계획하려고 www.acmicpc.net 저는 DP를 이용해 문제를 해결하였습니다. dp[날짜][파스타 타입][연속된 개수]로 표현하였습니다. Map을 통해 해당 날짜에 미리 정해진 파스타 종류가 있는지를 판단하여 문제를 해결하였습니다 package BOJ.dp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.u..

알고리즘 2023.09.08

백준 2637번 장난감 조립 (JAVA)

https://www.acmicpc.net/problem/2637 2637번: 장난감 조립 첫째 줄에는 자연수 N(3 ≤ N ≤ 100)이 주어지는데, 1부터 N-1까지는 기본 부품이나 중간 부품의 번호를 나타내고, N은 완제품의 번호를 나타낸다. 그리고 그 다음 줄에는 자연수 M(3 ≤ M ≤ 100)이 주 www.acmicpc.net 저는 위상정렬을 통해 문제를 해결하였습니다. 위상정렬을 통해 일의 순서를 정하였습니다. 완제품 먼저 진행하고 그에 필요한 재료품의 개수를 찾아나갔습니다. 그냥 dfs를 이용해서 풀어도 될 것 같지만 그렇게 하면 시간초과가 나와 위상정렬을 통해 문제를 해결하였습니다. package BOJ.etc; import java.io.BufferedReader; import java..

알고리즘 2023.09.07

백준 15658번 연산자 끼워넣기2 (JAVA)

https://www.acmicpc.net/problem/15658 15658번: 연산자 끼워넣기 (2) N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 연산자의 개수 www.acmicpc.net 저는 dfs를 이용해 문제를 해결하였습니다. dfs를 통해 모든 경우의 연산을 다 해보고 최대값과 최소값을 구하여 문제를 해결하였습니다. package BOJ.etc; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Comparator; import java..

알고리즘 2023.09.06

백준 1744번 수 묶기 (JAVA)

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 저는 음수와 양수에 대해 각각 우선순위 큐를 통해 문제를 해결하였습니다. 0은 음수의 우선순위 큐에 들어가도록 하였습니다. 이유는 -3 0 이렇게 남는다면 둘이 곱해야하지 최대가 되기 때문입니다. 양수의 경우는 곱하게 되면 0이 되기 때문에 최대가 되지 않습니다. 곱은 양수의 경우 큰 수 * 큰 수가 크고, 음수는 작은 수 * 작은 수가 더 크기 때문에 음수는 가장 값이 낮은 값이 먼저 나오게,..

알고리즘 2023.09.05

백준 29160번 나의 FIFA 팀 가치는? (JAVA)

https://www.acmicpc.net/problem/29160 29160번: 나의 FIFA 팀 가치는? 첫 번째 줄에 선수의 수 $N$과 $K$가 공백으로 구분되어 주어진다. $(0\leq N\leq 1\,000\,000;$ $1\leq K\leq 50\,000)$ 두 번째 줄부터 $N$개의 줄에 걸쳐 각 줄에 $i$번째 선수의 포지션 $P_{i}$, 선수 가치 $W_{i}$가 www.acmicpc.net 저는 우선순위 큐를 통해 문제를 해결였습니다. 먼저 각 포지션마다 우선순위 큐를 두어서 각 포지션 별로 가장 가치가 높은 사람부터 나오도록 하였습니다. 3월은 각 포지션을 돌면서 가장 가치가 큰 사람을 팀으로 넣고, 8월은 팀에 있는 모든 사람의 가치를 1씩 줄이고 11월은 다시 가장 가치가 큰 ..

알고리즘 2023.09.04

백준 28353번 고양이 카페 (JAVA)

https://www.acmicpc.net/problem/28353 28353번: 고양이 카페 첫째 줄에 정수 $N$과 $K$가 공백으로 구분되어 주어진다. $(1 \leq N \leq 5\,000;$ $1 \leq K \leq 10^9)$ 둘째 줄에는 각 고양이의 무게를 의미하는 $N$개의 정수 $w_1, w_2, \dotsm, w_N$이 공백으로 구분되어 주어 www.acmicpc.net 저는 투포인트를 이용해 문제를 해결하였습니다. 먼저 입력으로 들어오는 고양이들의 무게를 오름차순으로 정렬하고, 시작 지점 과 끝 지점부터 해당 무게를 더하고 이 값이 k보다 크다면, 끝 지점을 하나 줄이고, 같거나 작다면 시작지점을 늘리면서 끝지점을 늘리고 결과값을 하나 늘렸습니다. 이렇게 k보다 작은 두개의 합의 ..

알고리즘 2023.09.03