전체 글 795

백준 9935번 문자열 폭발 (JAVA)

https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 저는 스택을 통해 문제를 해결하였습니다. 스택으로 이전의 문자들을 저장하고, 스택이 폭발 문자열의 길이보다 크다면, 위에서부터 폭발 문자열과 비교하여 같다면 스택에서 전부 빼어 문제를 풀었습니다. package BOJ.etc; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stack;..

알고리즘 2023.12.01

백준 1940번 주몽 (JAVA)

https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 저는 투포인트를 통해 문제를 해결하였습니다. 먼저 입력을 정렬하고, 처음과 끝을 포인터로 가리키고, 합이 m과 같다면 처음 포인터를 늘리고 끝 포인트를 줄이고, m보다 작다면 처음 포인터를 늘리고, m보다 크다면 끝 포인트를 줄여 합이 m과 같아지는 것이 몇 쌍인지를 판단하였습니다. package BOJ.twopoint; import java.io.BufferedReade..

알고리즘 2023.11.30

백준 7568번 덩치 (JAVA)

https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. 구현으로 해당하는 사람이 몇 명보다 덩치가 작은지를 판단하고 이 값에 +1을 해주어 해당 사람의 등수를 찾았습니다. package BOJ.bruteforce; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.ut..

알고리즘 2023.11.29

백준 2343번 기타 레슨 (JAVA)

https://www.acmicpc.net/problem/2343 2343번: 기타 레슨 강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경 www.acmicpc.net 저는 이분탐색을 통해 문제를 해결하였습니다. 이분탐색으로 시간복잡도를 줄이고, 해당 값으로 기타레슨을 나눌 수 있는지를 판단하여 있다면, 큰 값을 줄이고, 없다면 작은 값을 늘려 최소의 길이를 찾았습니다. package BOJ.binarysearch; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stri..

알고리즘 2023.11.28

백준 3273번 두 수의 합 (JAVA)

https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 저는 투 포인트를 통해 문제를 해결하였습니다. 먼저 입력을 정렬하고, 양 끝에 포인터로 가리키고, 이 합이 x보다 작다면 start포인터를 늘려 합을 늘리고, 합이 x보다 크다면 end포인터를 줄여 합을 줄였습니다. 같다면 start, end 포인터 둘 다 움직여 몇쌍의 합이 x인지를 판단하였습니다. package BOJ.twopoint; i..

알고리즘 2023.11.27

백준 1141번 접두사 (JAVA)

https://www.acmicpc.net/problem/1141 1141번: 접두사 접두사X 집합이란 집합의 어떤 한 단어가, 다른 단어의 접두어가 되지 않는 집합이다. 예를 들어, {hello}, {hello, goodbye, giant, hi}, 비어있는 집합은 모두 접두사X 집합이다. 하지만, {hello, hell}, {giant, www.acmicpc.net 저는 구현을 통해 문제를 풀었습니다. indexOf를 통해 해당 문자열이 첫번째로 나오는지를 확인하여 문제를 풀었습니다. package BOJ.etc; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public class BO..

알고리즘 2023.11.26

백준 12100번 2048 (JAVA)

https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. dfs로 뎁스가 5인 모든 경우의 수를 찾고 이 중 최대 값을 찾아 문제를 해결하였습니다. package BOJ.simulation; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public cla..

알고리즘 2023.11.25

백준 14503번 로봇 청소기 (JAVA)

https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. 먼저 현재칸을 청소하고, 4방향으로 청소하지 않은 곳을 찾고 없다면 바로 끝내고 있다면 그 방향까지 방향을 돌리고 한칸 전진하였습니다. 위의 방식을 끝날 때 까지 하여 문제를 해결하였습니다. package BOJ.simulation; import java.io.BufferedReader; import jav..

알고리즘 2023.11.24

백준 3190번 뱀 (JAVA)

https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 저는 구현을 통해 문제를 해결하였습니다. dir을 통해 현재 방향을 표시하고, 뱀의 머리쪽을 먼저 늘리고 사과가 없다면 deque에서 마지막 것을 빼 꼬리를 줄였습니다. 이렇게 계속 진행하여 게임이 언제 끝나는지를 판단하여 문제를 해결하였습니다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Deque; ..

알고리즘 2023.11.23

백준 2512번 예산 (JAVA)

https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 www.acmicpc.net 저는 이분탐색으로 문제를 해결하였습니다. 각각의 가격에 대해 되는지 안되는지를 확인하게 된다면 n*m으로 시간초과가 나올 것입니다. 그래서 이분탐색으로 log(n)*m의 시간복잡도로 낮추어 문제를 해결하였습니다. package BOJ.binarysearch; import java.awt.print.Pageable; import java.io.BufferedReader; import java...

알고리즘 2023.11.22