(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) 프로그래머스 - 전력망을 둘로 나누기
·
코딩 테스트
그리 어렵지 않은 문제라고 느껴져서 금방 풀 줄 알았는데 wires로 인접 행렬을 만드는 부분에서 조금 시간이 걸렸다. 1. 인접 행렬 만들기 2. 선 하나씩 끊으면서 bfs 탐색 으로 로직이 간단하다. 최종 코드 import java.util.LinkedList; import java.util.Queue; class Solution { static int[][] arr; public int solution(int n, int[][] wires) { int answer = Integer.MAX_VALUE; // 인접 행렬 만들기 arr = new int[n + 1][n + 1]; for (int i = 0; i < wires.length; i++) { arr[wires[i][0]][wires[i][1]]..
(Java) 프로그래머스 - 후보키
·
코딩 테스트
카카오 문제 치고 문제 설명이 짧아서 쉽게 풀 수 있을 줄 알았는데 꽤나 오래 걸렸다. 데이터 베이스를 공부한 지 오래되어서 후보키의 개념이 생각나지 않았지만 문제 설명을 보고 빠르게 이해했다. 처음에는 먼저 컬럼을 탐색해서 중복이 없다면 조합을 만드는 로직으로 생각했으나 그게 더 복잡한 것 같아서 모든 조합을 만들고 유일성과 최소성을 검사하는 로직으로 구현했다. 매끄럽게 풀었던 문제가 아니라서 조금 찝찝한 느낌이 있다. 기억이 나지 않을 때쯤 다시 풀어봐야겠다. 최종 코드 import java.util.*; class Solution { static int answer; static int n,m; static List candidateKey; static String[][] relationCopy; ..
(Java) 프로그래머스 - 모음사전
·
코딩 테스트
문제는 L2에 맞지 않게 너무 쉬웠다. 재귀를 사용할수만 있다면 바로 풀리는 문제다. 원래는 str이 word와 같다면 메서드를 바로 종료하고 싶어서 밑과 같이 작성했지만 모든 사이클을 무조껀 돌아야 했다. if(word.equals(str)) { answer = cnt; return; } if(depth == 5) { return; } 그래서 그냥 모든 조합을 list에 넣고 선형 탐색으로 답을 구했다. 모든 조합을 다 해봐야 3600개쯤 밖에 안되니 시간 초과가 나진 않을 것 같았다. 최종 코드 import java.util.ArrayList; import java.util.List; class Solution { static String[] arr; static List list; public in..
(Java) 백준 14502 - 연구소
·
코딩 테스트
골드 4 문제인데 정답률이 높아서 도전한 문제이다. DFS와 BFS 문제 심화 버전? 같은 느낌이었고 2시간 정도 걸렸다. 처음에는 벽을 세우는 로직에 대해서 고민을 했었다. 2를 기준으로 세우는 알고리즘과 1을 기준으로 세우는 알고리즘을 한참을 생각해봤지만 떠오르지 않았다. 시간제한이 2초이고 M이 8이하로 입력되니 그냥 모든 벽을 세우는 완전 탐색으로 진행했다. 1. 완전 탐색으로 모든 벽을 세워본다. 2. BFS로 바이러스를 퍼트린다. 3. 남아있는 0을 센다. 이렇게 로직을 작성했고 코드로 구현하는데 한시간정도 걸렸던 것 같다. 나머지 한시간은 연속적으로 메서드를 호출하는 과정에서 배열의 값이 꼬이는 걸 해결하는데 썼다. 3개의 메서드가 연속적으로 호출되는데 이렇게 구현한적은 처음이라서 시간이 오..
(Java) 프로그래머스 - 예상 대진표
·
코딩 테스트
문제가 꽤 쉬운 편이었다. 특정 알고리즘을 사용하는 것도 아니라서 그냥 문제에 나온대로 코드로 구현했다. 처음에는 HashMap을 이용해서 한번 대진을 돌고나면 새로 번호를 부여하려고 했는데 다시 생각해보니 불필요할 것 같아서 메서드를 수정했다. 최종 코드 class Solution { public int solution(int n, int a, int b) { int answer = search(n, a, b); return answer; } // 대진 진행 메서드 static int search(int n, int a, int b) { int first = 0; int second = 0; // while문 탈출을 위한 a, b 대소 빅교 if (a > b) { first = b; second = a..
(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 =..