(Java) 백준 9934 - 완전 이진 트리
·
코딩 테스트
문제가 어려운 느낌은 아닌데 중간중간 막혔던 문제이다. 먼저 완전 이진 트리의 노드 개수는 2^k-1개 를 생각해야 하고 그리고 문제에서 입력값이 중위 순회이기 때문에 루트 노드가 매번 가운데에 있는 것을 알아야 한다. 이런 특징을 제대로 몰라서 막혔던 것 같다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static int k; static int[] arr; static List list; public static void main(..
(Java) 백준 5639 - 이진 검색 트리
·
코딩 테스트
많이 어려움을 겪었던 문제였다. 보통 다른 문제들은 입력값 N을 주어 몇 번 입력되는지 알려주는데 이 문제는 N이 없어서 고생을 많이 했다. while문으로 입력값이 없으면 멈추게 하려고 시도하고 IDE에서 디버깅을 했는데 잘 되지 않았다. 입력문을 처리하려고 한 시간을 넘게 시도했지만 계속 실패해서 결국 검색을 통해 다른 분들은 어떻게 풀었는지 참고했는데 나랑 똑같은 방법으로 풀었다........ 설마 IDE가 문제인가 싶어서 디버깅 없이 답안을 제출하니 맞았다. 트리를 연습하려고 문제를 풀었는데 입력값 처리만 고민해서 허무했다. 이 문제는 입력값으로 트리로 만들 수만 있다면 간단한 문제다. 트리를 만들 수 있다면 후위 순회 메서드는 금방 작성할 수 있기 때문이다. 다만 트리를 만드는 게 그렇게 쉽지는..
(Java) 백준 11725 - 트리의 부모 찾기
·
코딩 테스트
문제를 풀다 보니 트리에 약점이 있는 것 같아 트리 문제를 풀어보았다. 문제 이해가 좀 어려웠다. 문제에 어떤 트리인지 특정하지 않아서 생각하기 더 어려웠나? 인접 행렬이나 인접 리스트를 만들면 탐색은 금방 할 것 같았는데 인접 리스트를 만드는 게 어려웠다. 트리 문제를 더 풀어봐야겠다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System..
(Java) 백준 9935 - 문자열 폭발
·
코딩 테스트
간단해 보이는 문제였지만 어떤 식으로 구현할지 고민이 많이 되는 문제였다. 슬라이딩 윈도우를 적용하는 방법도 생각해봤지만 이미 합친 문자열을 나누는 게 쉽지 않았다. 조금만 고민하면 금방 풀 것 같은 느낌이여서 한 시간을 넘게 이것저것 시도해보다 검색해서 힌트를 얻었다. Stack을 이용해서 문자열을 하나씩 넣은후 탐색하는 방법인데 비슷하게는 생각했었지만 막상 코드로 구현하려니 쉽지 않았다. 간단해 보이지만 혼자서 생각했다면 몇 시간을 고민했어도 성공했을지는 잘 모르겠다. 유형별로 돌려가며 풀어야겠다. 최종 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.uti..
(Java) 백준 1991 - 트리 순회
·
코딩 테스트
문제는 간단했지만 이진트리 형식으로 구현하는 게 힘들었다. 입력값을 트리 형태로 바꾸기만 한다면 금방 풀리겠다고 생각했지만 트리 형태로 바꾸는게 생각이 나지 않았다. 그래서 검색을 해서 힌트를 얻었고 순회 메서드들은 금방 작성했다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[][] tree; static StringBuilder sb; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(..
(Java) 백준 14502 - 연구소
·
코딩 테스트
골드 4 문제인데 정답률이 높아서 도전한 문제이다. DFS와 BFS 문제 심화 버전? 같은 느낌이었고 2시간 정도 걸렸다. 처음에는 벽을 세우는 로직에 대해서 고민을 했었다. 2를 기준으로 세우는 알고리즘과 1을 기준으로 세우는 알고리즘을 한참을 생각해봤지만 떠오르지 않았다. 시간제한이 2초이고 M이 8이하로 입력되니 그냥 모든 벽을 세우는 완전 탐색으로 진행했다. 1. 완전 탐색으로 모든 벽을 세워본다. 2. BFS로 바이러스를 퍼트린다. 3. 남아있는 0을 센다. 이렇게 로직을 작성했고 코드로 구현하는데 한시간정도 걸렸던 것 같다. 나머지 한시간은 연속적으로 메서드를 호출하는 과정에서 배열의 값이 꼬이는 걸 해결하는데 썼다. 3개의 메서드가 연속적으로 호출되는데 이렇게 구현한적은 처음이라서 시간이 오..
(Java) 백준 2559 - 수열
·
코딩 테스트
슬라이딩 윈도우를 사용하는 문제이다. 기본 개념만 알고 있다면 쉽게 풀 수 있는 문제라서 슬라이딩 윈도우 개념 복습 차원에서 풀어보았다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n =..
(Java) 백준 2447 - 별 찍기 10
·
코딩 테스트
문제가 재밌어 보여서 선택했는데 하나도 재밌지 않았다. 규칙도 쉽게 보이고 재귀 호출로 n이 1일때 탈출하는것은 생각하기 쉬웠지만 막상 구현하려니 쉽지 않았다. 시간 제한이 1초라서 매번 println을 사용하면 100% 시간 초과가 난다고 생각해서 StringBuilder를 사용해서 찍어보려고 했는데 개행 문자 \n을 사용하면 별이 이상하게 찍혔다. 될듯 말듯 하다가 결국 검색을 해서 풀었는데 가장 이해하기 어려웠던 부분은 아래 부분이었다. if (!(i == 1 && j == 1)) { rec(x + i * (num / 3), y + j * (num / 3), num / 3); } x와 y의 좌표를 재귀때마다 수정해서 별을 찍는 로직인데 이해하는데 한참 걸렸다. 혼자서는 이렇게 생각하지는 못했을것 같..
(Java) 백준 15686 - 치킨 배달
·
코딩 테스트
예전에 풀었던 프로그래머스 거리두기 확인하기와 비슷하다고 느낀 문제였다. 이번 문제는 탐색보다 구현에 더 초점이 맞춰져 있던 것 같다. 요즘 코테를 보면서 느낀 코테 트렌트는 구현인 것 같다. 특정한 알고리즘을 알아야 풀 수 있는 문제도 몇 문제 있었지만 대부분이 구현 문제였다. 그래서 구현 문제를 중심으로 연습해야 할 것 같다. 문제를 읽고 이렇게 나누어 로직을 짰다. 1. 치킨 집중에서 m개를 선택해 조합 구하기 2. 구한 조합으로 각 집마다 치킨 거리 구하여 최솟값을 선택 3. 각 집에 최솟값을 더하여 도시의 치킨 거리 구하기 4. 모든 조합을 돌면서 도시의 치킨 거리의 최솟값을 반환 다만 이 로직이 맞는지 확신이 들지 않았지만 떠오르는 게 이 방법밖에 없어 코드로 구현했다. 구현하며 몇 번 막혔던..