목록Study/Problem Solving (163)
전공공부
설명 열린 괄호를 기준으로 큐에 넣고 닫힌 괄호가 들어오면 하나씩 빼서 괄호가 되는지 유무를 판단했다. 코드 package Data_Structure; import java.io.*; import java.util.*; public class BOJ_9012 { public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); Queue q = new LinkedList(); for(int i = 0; i < N; i++){ boolean check = true; q = new LinkedList(); String str = sc.next(); char[] crr ..
설명 FIFO 처음 들어온 것이 가장 먼저 나가니 Queue의 형태를 사용했다. 다시 맨 앞의 것을 맨 뒤에 넣고 다시 맨 앞의 것을 빼서 내려 놓고를 반복하기 때문에 큐를 썼다. 코드 package Data_Structure; import java.util.*; import java.io.*; public class BOJ_2164 { public static void main(String[] args) throws Exception{ Queue q = new LinkedList(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(in.readLine()); for(int ..
설명 큐를 구현하면 되는 문제 코드 package Data_Structure; import java.io.*; import java.util.*; public class BOJ_18258 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); int N = Integer.parseInt(tk.nextToken()); int queue[] = new int[N]; int back = 0; int front = 0; St..
설명 자료구조를 구현하는 것이 목적인 문제이다. 일반적인 스택으로도 풀었고 배열을 이용해서도 풀어보았다. 코드 스택 자료 구조 사용 package Data_Structure; import java.io.*; import java.util.*; public class BOJ_10828 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); int N = Integer.parseInt(tk.nextToken()); Sta..
설명 간만에 한 방 통과했다. 우선, 그리디하게 접근해서 5*5 사각형 부터 찾는 형식으로 진행하였으며 모든 방향에서 사각형을 카운트 할 수 있어야 하므로 백트래킹을 시전하였다. 그러고 나니 답을 쉽게 찾을 수 있었다. 코드 package backtracking; import java.util.*; import java.io.*; public class BOJ_17136 { static int [][] map; static boolean [][] visited; static int[] cnt; static int N,ans; public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new I..
설명 https://github.com/tony9402/baekjoon/blob/main/solution/backtracking/22944/main.py 위 솔루션을 참고하여 문제를 풀었다. 계속해서 시간 초과가 나서 솔루션을 보게 되었는데 아래와 같은 결과로 풀 수 있었다. 결국 우리는 갈 수 있는 거리 이내에 체력 + 내구도가 버텨주면 된다. 따라서, 아래와 같이 dist2 - 1 >= health + durability (U 위치에서도 죽음의 비가 내린다.) 이 거리에서만 도달 가능하다면 지금 들고 있는 우산으로 갈 수 있는 거리가 나오고 이때, 만일 현재 우산의 내구도가 거리 보다 크다면 조건에 의해서 죽음의 비를 피하고 해당 우산은 버린 뒤 다시 새로운 우산을 집어들고 출발하게 된다. 이와 달리..
설명 체크하는 로직이 중점이고 나머지는 일반 순열 만들듯이 진행하면 된다. 코드 package backtracking; import java.io.*; import java.util.*; public class BOJ_2661 { static int N; public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(in.readLine()," "); N = Integer.parseInt(tk.nextToken()); go(0,""); } public static..
설명 처음에는 idx를 x 위치로 고정하고 for문으로 y 위치를 옮기면서 실행하였는데 이러면 마지막 행에서의 값을 제대로 처리하지 못하는 이슈가 있었다. 2 5 100 1 1 1 1 1 1 100 1 100 의 출력 값이 404가 나왔는데 실제로는 606이 정답이다. 그래서, x,y 값을 모두 돌 수 있는 방식으로 변경하게 되었다. 코드 import java.util.*; import java.io.*; public class Main { static int N,M,ans; static boolean[][] visited; static int arr[][]; public static void main(String[] args) throws Exception{ BufferedReader in = new ..