Algorithm 306

리모컨

📍 문제 설명 💡 접근 누를 수 있는 버튼 중 거리가 최소가 되는 지점을 찾으려면 완전 탐색을 하는 수 밖에는 없었다. 이동하려는 채널은 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

문자열 폭발

📍 문제 설명 💡 접근 문자열의 최대 길이는 100만이므로 replaceAll 메서드를 사용하거나 문자 제거 해준후 다시 전체 문자열에 대해서 탐색할 때 시간초과 판정이 난다. 1.문자를 스택에 push 한다. 2.스택의 길이가 폭발 문자열의 길이보다 같거나 클 때 폭발 문자열인지 확인한다. 3.폭발 문자열과 일치하면 폭발 문자열만큼 스택에서 pop 한다. 4.남은 문자열을 출력한다. 👩‍💻 코드 import java.util.*; public class Main { static long n, m, k, cnt, max, min, sum, count, r, c, result, answer = Integer.MAX_VALUE; static char[][] board, clone, dis; static bo..

Algorithm/baekjoon 2022.01.28

크게 만들기

📍 문제 설명 💡 접근 처음에 n개중에 k개를 제외시키는 조합으로 접근했으나 N의 범위가 커서 메모리 초과 판정을 받았다. Stack을 이용하여 풀 수 있었다. 1.첫번째의 값은 무조건 큐에 넣어둔다. 2.스택 마지막 값 보다 현재 값이 더 작으면 스택에 넣어준다. 3.스택 마지막 값 보다 현재 값이 더 크면 pop 시켜주는 작업을 반복한다. 4.지워야하는 횟수를 모두 채웠으면 나머지 남은 숫자들을 더해준다. 5.지워야하는 횟수를 모두 채우지 않고 반복문이 끝났다면 지워야하는 횟수만큼 pop 시켜준다. 👩‍💻 코드 import java.util.*; public class Main { static long n, m, k, cnt, max, min, sum, count, r, c, result, answe..

Algorithm/baekjoon 2022.01.28

쇠막대기

📍 문제 설명 💡 접근 강의에서 배웠던 문제와 동일한 문제 닫는 괄호가 레이저인지 막대기의 끝을 알리는지만 판단해주면 된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, k, cnt, max, min, sum, count, r, c, answer; static char[][] board, clone, dis; static boolean[][] visited; static int[] ch, pm, combi, graph, temp; static boolean flag = false; static int[] dx = {-1, 0, 1, 0,}; //북동남서 static int[] dy = {0, 1, 0, -1}; static ArrayL..

Algorithm/baekjoon 2022.01.27

봄버맨

📍 문제 설명 💡 접근 1초 경과 - 그대로 2초 경과 - 모든 칸에 폭탄 설치 3초 경과 - 폭탄 설치된 칸에서 폭발(1초) 4초 경과 - 모든 칸에 폭탄 설치 5초 경과 - 3초 전에 설치된 폭탄이 폭발(3초) 2,3 4,5 초와 같이 설치, 폭발이 반복된다. 1.폭탄 좌표를 큐에 넣는다. 2.모든 좌표에 폭탄을 설치한다. 3.폭탄 좌표를 폭발시킨다. 1~3을 반복하면된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, k, answer, cnt, max, min, sum, count, r, c; static char[][] board, clone, dis; static boolean[][] visited; static int[] c..

Algorithm/baekjoon 2022.01.27