Algorithm/baekjoon 126

문자열 폭발

📍 문제 설명 💡 접근 문자열의 최대 길이는 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

미세먼지 안녕

📍 문제 설명 💡 접근 시뮬레이션 문제에 아직 익숙하지 않아서 문제 이해도 어렵고 코드도 지저분하다. 계속해서 생각하면서 푸는 연습을 하자! 1.공기청정기는 1열에 설치되지만 행은 지정된 것이 아니므로 위치를 찾을 수 있는 변수 설정 2.t초간 미세먼지가 있는 공간에 대해서 미세먼지를 확산& 공기청정기 작동 3.확산은 동시에 진행되어 남은 미세먼지 양과 확산되는 양이 모두 더해져야 한다. 다른 블로그와 코드를 비교해보니 원본 배열 하나만 이용하더라도 풀이가 가능하다. 4.모든 미세먼지가 확산되었으면 공기청정기가 작동되어 순환방향에 따라 값이 변경된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, k, answer, cnt, max, m..

Algorithm/baekjoon 2022.01.27

경사로

📍 문제 설명 💡 접근 모든 행에 대해서 모든 열까지 갈 수 있는지, 모든 열에서 모든 행까지 갈 수 있는지 판단해주면 되는 문제였다. 1.bfs 풀이와 비슷하게 큐를 이용하였고 바로 이동하든 경사로를 설치해서 이동하든 이동된 좌표를 큐에 넣어주었다. 2.(0, 0) 좌표는 행의 끝, 열의 끝 모두 판단해줘야하기 때문에 kind로 판단해주었다. 3.경사로가 겹치는 경우엔 설치를 하지 못하므로 설치할 때 설치가 된 모든 좌표에 대해서 설치 되었다고 체크해주었다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, k, answer, cnt, max, min, sum, count, l; static int[][] board, clone, dis;..

Algorithm/baekjoon 2022.01.26

인구이동

📍 문제 설명 💡 접근 1.먼저 국경선이 열려 인구이동이 발생하는 국가들에 대해 각각 그룹번호를 붙여주기 위한 배열을 하나 생성한다. 2.모든 지점에 대해서 탐색하는데 그룹번호가 붙여지지 않은 나라들에 대해서만 탐색한다. 3.해당 지점에서 상하좌우 확인하여 국경선이 열리는 나라라면 큐에 해당 좌표를 넣고 리스트에도 해당 좌표를 넣는다. 4.국경선이 열리는 것을 확인했으면 리스트에서 연합 국가들을 꺼내 인구를 분배한다. 5.연합번호가 n * n이 되면(인구이동을 할 수 없으면) 멈추고 아니면 1번으로 돌아가서 다시 수행한다. 👩‍💻 코드 import java.util.*; class Position { private int x; private int y; public Position(int x, int y..

Algorithm/baekjoon 2022.01.26

이차원 배열과 연산

📍 문제 설명 💡 접근 생각보다 복잡해서 꽤나 시간을 많이 썼다. 1.계수 정렬로 값, 등장 횟수를 구하고 해당 필드를 갖는 클래스를 만들어서 정렬기준에 따라 정렬한다. 2.새로운 배열에 list 사이즈의 2배(값, 등장 횟수를 배열에 넣어야하므로)로 초기화한다. 3.해당 배열을 int[] 형 리스트에 담아놓고 새로운 배열을 만든다. 추가 조건을 잘못넣었었는데, 배열의 길이가 3x3보다 작을 때 0을 3x3만큼 채워줘야 하는가이다. 해당 조건은 값이 맞는지 찾는 지점보다 크기가 작은 배열이 들어올 때 ArrayIndex~ 에러가 나서 넣어줬었는데, 그냥 값이 맞는지 찾는 지점에 해당 지점보다 크기가 작으면 안된다는 조건을 넣어줌으로써 해결했다. 👩‍💻 코드 import java.util.*; public..

Algorithm/baekjoon 2022.01.25

로봇청소기(14503)

📍 문제 설명 💡 접근 이코테 책에서 풀었던 시뮬레이션 문제였다. 4번까지 회전해서 갈 수 있으면 청소해주고 갈 수 없으면 뒤로가거나 멈추면 된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, cnt, max, min; static int startRobotX, startRobotY, startRobotDireciton; static int Hx, Hy, Ex, Ey; static int[][] board, clone, dis; static boolean[][] visited; static int[] ch, pm, combi, graph, go = {1,2,3}; static boolean flag = false; sta..

Algorithm/baekjoon 2022.01.25