반응형

전체 글 201

[백준] 10799 : 쇠막대기 (JAVA)

https://www.acmicpc.net/problem/10799 [풀이과정]막대기를 자르는 레이저의 개수 + 1만큼 막대기가 증식함. 1) '(' 일 때stack에 넣어줌 2) ')' 일 때 -> 두 가지 경우로 나뉨먼저 pop해서 '('를 제거2-1) 레이저의 끝일 때stack에 있는 막대기 모두를 자르기 때문에 +stack.size를 해줌 2-2) 막대기의 끝일 때+1 해주기 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;import java.util.StringTokenizer;/*쇠막대기를 겹침.자신보다 긴 막대기 위에만 놓일 수 있..

알고리즘/스텍 2025.04.23

[백준] 11048 : 이동하기 (JAVA)

https://www.acmicpc.net/problem/11048 [풀이과정]점화식으로 안 풀어서 시간초과 났었음 ㅠㅠ 1. DP 값을 채워넣는 공간은 (1,1) ~ (N,M)2. 왼쪽, 위, 왼쪽위대각선 값 중 가장 큰 값을 가져오면서 값을 채움3. (0,0)~(N,M) 크기의 그래프로 계산 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*NxM 미로가장 왼쪽 윗 방 (1,1), 가장 오른쪽 아랫 방 (N,M)각 방에는 사탕이 있음현재 위치 (1,1)에서 (N,M)으로 이동하려 할 때(r,c)에 있으면 아래,오른쪽,오른쪽..

알고리즘/DP 2025.04.23

[백준] 10816 : 숫자카드2 (JAVA)

https://www.acmicpc.net/problem/10816 [풀이과정]HashMap 사용.이분탐색 방식은 이분탐색을 두 번 돌려서 한 번은 left 값을, 한 번은 right 값을 구해서 개수를 구하기. [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;/*카드 N개정수 M개가 주어졌을 때 이 수가 적혀있는 카드를 몇 개 가지고 있는지 구하기 */public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static..

백준/자료구조 2025.04.14

[백준] 2805 : 나무자르기 (JAVA)

https://www.acmicpc.net/problem/2805 [풀이과정]나무 길이를 골라야 하는데 길이의 최댓값이 너무 커서 이분탐색을 사용했다.1. 나무를 정렬2. 가장 긴 나무길이를 high로 두고 이분탐색 시작 3. 충족하는 길이가 나오면 결과값을 갱신해주며 low 값 갱신 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Collections;import java.util.StringTokenizer;/*나무 M미터가 필요.1. 높이 H를 지정 -> 한 줄에 연속해있는 나무 모두 절단2. 잘린 나무 획득..

백준/이분탐색 2025.04.07

[백준] 1463 : 1로 만들기 (JAVA)

https://www.acmicpc.net/problem/1463 [풀이과정]DP문제. N을 index로 두고DP[N]를1 ) 3으로 나뉠 때 -> DP[N/3] + 12 ) 2로 나뉠 때 -> DP[N/2] + 1 3 ) -1 할 때 -> DP[N-1] + 13가지 중 가장 작은 값으로 갱신하며 채우기. [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*1. X가 3으로 나누어 떨어지면, 3으로 나눈다.2. X가 2로 나누어 떨어지면, 2로 나눈다.3. 1을 뺀다. */public class Main{ static Bu..

알고리즘/DP 2025.04.07

[백준] 1654 : 랜선자르기 (JAVA)

https://www.acmicpc.net/problem/1654 [풀이과정]이분탐색 문제다.오랜만에 풀어서 로직이 헷갈렸는데 mid 값 갱신 시 +1, -1 해주기. low는 0으로 두지 말기. 두 가지 복기하자. [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*K개의 랜선 보유 - 길이가 다 다름N개의 같은 길이의 랜선으로 만들기 위해 K개의 랜선을 자르기(ex. 300cm : 140cm 두 개를 위해 20cm 버려야 함)N개보다 많이 만드는 것도 N개를 만드는 것에 포함.만들 수 있는 최대 랜선의 길이 구하기 */pub..

백준/이분탐색 2025.04.03

[백준] 11726 : 2 x n 타일링 (JAVA)

https://www.acmicpc.net/problem/11726 [풀이과정]전형적인 DP 문제다. 점화식으로 풀면 됨.직접 타일을 그려보면  f(n-1)의 가짓수에 세로 타일을 하나씩 붙이고 + f(n-2)의 가짓수에 가로 타일 2개가 붙은 모양임f(0) = 1, f(1) = 1 이고f(n) = f(n-2) + f(n-1) [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/*2xn 크기의 직사각셩을 1x2,2x1 타일로 채우는 방법의 수 구하기 */public class Main { static BufferedReader br = new BufferedReader(new Inp..

알고리즘/DP 2025.04.03

[백준] 30470 : 호반우가 학교에 지각한 이유 3 (JAVA)

https://www.acmicpc.net/problem/30470 [풀이과정]stack을 사용하였고 max가 갱신될 때마다 stack에 저장된 값들을 확인하면서 길이를 갱신하며 pop, push를 해주었는데 틀림. 로직은 맞는 것 같은데 왜 틀린지 잘 모르겠음.정답코드는 max 갱신 시마다 값을 확인하는 로직을 없앰. 새로 추가되는 통나무가 항상 제일 긴 통나무이고 max 값을 기준으로 통나무 길이가 갱신되는 것이기 때문에 max값만 저장해준 후 sum 값을 구할 때 로직 실행해켜주면 됨. [코드]import java.io.*;import java.util.*;public class Main { static BufferedReader br = new BufferedReader(new InputSt..

알고리즘/스텍 2025.04.02

[백준] 14940 : 쉬운 최단거리 (JAVA)

https://www.acmicpc.net/problem/14940 [풀이과정]메모리 초과 이유1. 각 지점을 출발점으로 해서 도착지점까지의 거리를 구하고, 이때 이미 구해진 지점이 있으면 depth랑 해당 값을 더해주고 탐색 마치는 로직으로 구현했는데 메모리 초과가 떴음. 매 지점마다 queue를 생성하고 탐색해서 그런 듯.도착지점을 시작점으로 두고 나머지 지점까지의 거리를 구하면 됨.  2. visited 체크를 queue에서 뽑을 때 하고 있었음. 상하좌우 탐색하는 로직 내부에 넣어야 하는데 이런 실수 다신 하지 말자 [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import j..

백준/DFS BFS 2025.04.01

[백준] 2631 : 줄세우기 (JAVA)

https://www.acmicpc.net/problem/2631 [풀이과정]전형적인 LIS 문제였다. N이 200으로 작아서 O(N^2)인 DP 방식으로 풀이했음.N이 커지면 O(nlogn)인 이분탐색으로 풀이해야 한다. 현재 탐색 중인 번호의 이전 번호들을 보면서 더 크면 DP[현재 번호] = DP[이전 번호 중 가장 큰 값을 가진 번호] + 1을 해주는 것  [코드]import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;/*N명의 아이들1번부터 N번. 옮기는 순서를 최소로 하여 일렬로 정렬 */..

알고리즘/DP 2025.03.25
반응형