(Java) 백준 1764 - 듣보잡
·
코딩 테스트
간단한 문제라고 생각했는데 의외로 20분이 넘게 걸렸다. 처음에 아무 생각 없이 ArrayList를 사용해서 각 list에 입력값을 넣어주고 2중 for문을 돌리며 비교했다가 4%에서 바로 시간 초과가 나왔다. 시간제한이 2초인데 왜 시간 초과가 나지? 하고 문제를 다시 보니 N과 M이 각각 500,000 이하의 자연수였다.... 그래서 이중 for문을 없애고 retainAll을 사용해서 교집합을 구했지만 또 시간 초과... 생각해보니 List는 탐색 시간이 오래 걸린다는 단점이 생각이 났고 그때가 되어서야 set이 생각났다. 또 문제에 입력값이 중복이 없다 라는 힌트가 있었는데 눈치채지 못했었다. 정렬이 되는 TreeSet을 이용해서 문제를 풀어 맞았다. 그런데 다른 분들의 답을 보니 입력을 n만큼 H..
(Java) 백준 1697 - 숨바꼭질
·
코딩 테스트
가장 빠른 시간이라는 문장에서 BFS를 사용해야겠다는 생각을 했다. 다만 어떤 식으로 BFS를 사용해야 하는지 모르겠어서 검색을 통해 다른 분들 답안을 참고했다. visited 배열을 사용해서 방문처리와 이동 횟수를 카운팅 하는 방법을 사용해서 풀었다. 어려운 문제라는 생각은 안들었지만 BFS에 아직도 익숙하지 않은 것 같아 계속 연습해야 할 것 같다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int n, m, cnt;..
(Java) 백준 7569 - 토마토
·
코딩 테스트
7576 문제에서 높이인 H값이 추가된 문제이다. x,y 값에 z값까지 더해 탐색하면 된다. 3차원 배열을 생성해 입력값을 배열에 넣어주었고 dz 배열을 생성해 상하좌우앞뒤를 모두 탐색할수 있게 했다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int m, n, h; static int arr[][][]; static int[] dx = {1,-1,0,0,0,0}; static int[] dy = {0,0,1,-1,0,0..
(Java) 백준 7576 - 토마토
·
코딩 테스트
전형적인 BFS 문제라고 생각했다. 그러나 푸는데 정말 시간이 오래 걸렸다. 처음에는 입력값을 배열에 넣고 1을 발견할 때마다 bfs를 실행시키려고 했다. 그런데 밑에 테스트 케이스를 만나면 6이 아닌 9를 반환하게 된다. 6 4 1 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 1 문제에서 요구하는 방향은 모든 익은 토마토에서 하루가 지날 때마다 주변에 토마토가 익는 방식인데 나는 첫번째 익은 토마토를 발견하면 bfs를 실행시키고 또 다른 익은 토마토를 발견하면 또 bfs를 실행시켜 결국 똑같은 값이 두 번 출력되는 것이었다. 그래서 bfs에 넘기는 입력값을 List로 설정해 모든 익은 토마토 인덱스를 한 번에 bfs 메서드에 넘겨주었다. 큐에 모든 익은 토마토의..
Spring Boot Devtools 적용 방법
·
Spring
Devtools Devtools를 라이브러리를 사용하면 서버 재시작 없이 view 파일 변경이 가능합니다. 적용방법 1. Dependency에 'org.springframework.boot:spring-boot-devtools' 를 추가합니다. 2. IntelliJ 설정 (IntelliJ 2022.01 한글 버전 기준) 빌드, 실행, 배포 -> 컴파일러 -> 프로젝트 자동 빌드 체크 고급 설정 -> 컴파일러 -> 개발된 애플리케이션이 현재 실행 중인 경우에도 auto-make가 시작되도록 허용 체크
(Java) 백준 17626 - Four Squares
·
코딩 테스트
처음에는 이 문제를 어떻게 풀어야 할지 전혀 감을 못 잡았다. 한참을 생각해도 답이 안 나와서 다른 분들 풀이를 참조했다. DP를 이용하는 문제였는데, 점화식도 생각보다 복잡해서 이해하는데 한참 걸렸다. 코드 자체는 어렵지 않으나 dp[i] = min(dp[i - j * j]) + 1 이라는 점화식을 생각하는 부분이 가장 어려웠던 것 같다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamRea..
(Java) 백준 11279 - 최대 힙
·
코딩 테스트
우선순위 큐를 만들고 내림차순으로 정렬해주면 된다. 저번에 풀었던 최소 힙이랑 비슷한 문제였다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Collections; import java.util.PriorityQueue; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); // 우선순위 큐 내림차순 정렬 ..
(Java) 백준 2178 - 미로 탐색
·
코딩 테스트
최단거리를 구하는 문제이므로 BFS를 사용했다. Queue에 int 배열을 이용해서 x, y의 값을 넣었고 이동 가능한 노드의 값을 1씩 증가시켜 가면서 탐색한다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int n, m, cnt; static int[] dx = {1, -1, 0, 0}; static int[] dy = {0, 0, 1, -1}; static boolean[][] visit; static int[][]..
(Java) 백준 5430 - AC
·
코딩 테스트
처음에 Deque를 알지 못해서 List로 입력값을 받아 진짜로 정렬을 했다. 당연히... 시간 초과로 통과하지 못하고 Deque를 이용해야 한다는 걸 검색해서 알았다. Deque를 사용해도 정말 통과하기 쉽지 않았다. 특히 "error" 출력시 continue 하기 위해 for문에 roof 별칭 부여까지 해서 겨우 통과했다. 아마 메서드를 분리해서 풀었다면 이렇게까지 복잡하진 않았을 것 같아서 리팩터링이 필요해 보인다. 시간 초과 (정렬 사용) import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) th..