Algorithm/baekjoon 126

퇴사

📍 문제 설명 💡 접근 책에서 DP를 이용해서 푸는 방법을 학습했으나 브루트포스 카테고리로 분류되어 있어서 브루트포스로 풀었다. 최대점수 구하기 문제와 비슷하게 상담을 진행한다/진행하지 않는다로 분류해야 한다. 진행하지 않는 경우도 고려해야 하는 이유는 해당 상담을 진행하지 않았을 때 얻게 되는 최종 금액이 더 클 수도 있기 때문이다. 👩‍💻 코드 1.브루트포스 import java.util.*; public class Main { static int n, m, answer, sum; static int[][] board,clone; static boolean[] arr; static boolean[][] visited; static int[] dx = {-1,1,0,0}; static int[] dy ..

Algorithm/baekjoon 2022.02.05

NM과 K (1)

📍 문제 설명 💡 접근 임의의 위치에서 인접한 위치를 제외하고 k번 선택후 합을 구하는 문제 1.중복 값이 더해지지 않도록 방문처리를 한다. 2.현재의 지점에서 갈 수 있는 인접한 지점에 방문처리가 안되어있을 때만 현 지점을 더한다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, k, answer = Integer.MIN_VALUE; static int[][] board; static int[] arr; static boolean[][] visited; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static StringBuilder sb = new StringBuilder(..

Algorithm/baekjoon 2022.02.05

1, 2, 3 더하기

📍 문제 설명 💡 접근 1.n을 넘지 않는 모든 합의 경우의 수를 모두 구해보면 된다. 2.보텀업 방식으로 1,2,3을 만들 수 있는 가짓수를 구해놓고 4부터 dp 테이블에 가짓수를 구해나가면 된다. 👩‍💻 코드 1.브루트포스 import java.util.*; public class Main { static int n, m, answer, cnt, min; static int[][] board,clone; static boolean[] arr; static boolean[][] visited; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static StringBuilder sb = new StringBuilder(); public stat..

Algorithm/baekjoon 2022.02.05

수 이어쓰기

📍 문제 설명 💡 접근 문자열을 다 더할 필요 없이 자릿수에 따라서만 cnt 값을 더해주면 된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, cnt, min; static String a, t; static int[][] board,clone; static boolean[] arr; static boolean[][] visited; static int[] breakdown; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static StringBuilder sb = new StringBuilder(); public static void main(String[]..

Algorithm/baekjoon 2022.02.04

테트로미노

📍 문제 설명 💡 접근 DFS를 이용해서 'ㅗ' 모양의 테트로미노를 제외하고 나머지 테트로미노의 합을 구할 수 있다. 방문처리된 곳은 다시 방문하지 않으므로 'ㅗ' 모양의 테트로미노의 합을 구하는 부분은 따로 구해줘야한다. 1.모든 좌표에서 ㅡ,ㅁ,ㄱ,ㄱㅡ 모양의 합을 DFS로 구하기 2.모든 좌표에서 'ㅗ' 모양의 합을 '+' 의 합을 구하는 것 처럼 구하기 - 좌표를 벗어나면 cnt 갯수 줄이고 3개면 그대로 합을 구하고 4개면 최솟값을 빼서 합을 구한다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, cnt, min; static String a, t; static int[][] board,clone; static b..

Algorithm/baekjoon 2022.02.04

리모컨

📍 문제 설명 💡 접근 누를 수 있는 버튼 중 거리가 최소가 되는 지점을 찾으려면 완전 탐색을 하는 수 밖에는 없었다. 이동하려는 채널은 500000이하지만 9를 제외한 모든 버튼이 고장났을 수도 있으므로 999999에서 이동하는 횟수도 고려해야 했다. 1.0~999999까지 버튼을 눌러야 하는 횟수를 구한다. 횟수 중 최솟값을 계속 누적해나간다. - 더해야하는 연산자의 갯수는 눌러야하는 번호의 갯수 - 현재 숫자의 갯수이다. - (5457-5455) = 2 -> 5455++, (5457-5459) = -2 -> 5455-- 2.누르지 못하는 번호라면 다음 숫자로 넘어간다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, c..

Algorithm/baekjoon 2022.02.04

사탕 게임

📍 문제 설명 💡 접근 사탕의 색이 다른 부분을 교환시켜서 긴 부분을 구하면 되는 문제 인접한 두칸이라고 했으므로 북동 쪽만 확인해줘도 되고 그냥 4 방향 중복으로 봐도 된다. 👩‍💻 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { static int n, m, answer, cnt; static String a, t; static char[][] board,clone; static boolean[][] visited; static int[] histogram; static int[] dx = {-1, 0, 1, 0,}; //북동남서 static int[] dy..

Algorithm/baekjoon 2022.01.31

히스토그램==========

📍 문제 설명 💡 접근 현재 막대가 이전 길이의 막대보다 작을 때 넓이를 구해줘야 한다. 1.현재 막대 높이보다 크거나 같은 막대를 만나면 모두 pop 해준다. 2.pop할 때 높이와 폭을 계산해서 넓이를 구해준다. 3.현재 막대를 push 한다. 4.현재 막대가 이전 길이의 막대와 같거나 클 수 있으므로 남아있는 넓이들도 계산해줘야한다. 스택에는 인덱스를 기준으로 넣었지만 값들을 기준으로 한다. i = 0일 때 push 한다. [2] i = 1일 때 2를 pop 한다. [] 넓이를 구한다. 높이 2 폭 1 -> 2 -> 비어있을 땐 i가 폭 현재 높이 push 한다. [1] i = 2일 때 push 한다. [1,4] i = 3일 때 push 한다. [1,4,5] i = 4일 때 1,4,5를 pop 한다..

Algorithm/baekjoon 2022.01.30

📍 문제 설명 💡 접근 효율성을 위해 스택을 이용하여 풀어야하는 문제 1.현재 값과 스택의 값을 비교하여 현재 값이 더 크면 이전 지점의 스택의 값들을 계속해서 빼준다. - 작은 이전 지점의 탑은 현재 지점의 탑에서 신호가 막히므로 2.신호 가능 지점을 발견했을땐 출력만 하고 멈춘다. 3.현재 지점의 탑을 스택에 넣는다. 👩‍💻 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { static int n; static int[] board; static StringBuilder sb = new StringBuilder..

Algorithm/baekjoon 2022.01.30