java 121

[백준 14500번] 테트로미노 - java

문제 설명1. 4개 정사각형을 이어붙이는 도형들이 있다. (변을 붙이는 모든 형태)2. 지도가 주어진다.3. 위의 도형으로 숫자를 더해서 최대값을 구하면 된다.풀이 과정1. 구현2. 삼전 문제는 매번 느끼는건데 뭔가 구현 위주로 코드를 길게 만드는걸 선호하는 것 같다. 개인적으로 취향은 아님3. DFS + 엣지케이스 처리.4. depth 4 까지 찾아가면서 DFS 해주면 되고, ㅓ ㅏ ㅗ ㅜ 같은 중간에 가지가 뻗어나가는것은 이로 처리하기가 쉽지 않다(뒤로 돌아와서 check를 다시 해야하기 때문) 이는 그냥 따로 엣지케이스로 처리해준다.5. 성능이 될까? 했는데 이게 되네..코드import java.util.*;public class Main { private static int[][] map; p..

알고리즘 공부 2025.02.20

[leetcode - 135. Candy] java

문제 설명1. 배열이 주어진다.2. 모든 학생은 사탕을 최소 1개 이상을 가진다.3. 양 옆 학생 중 나보다 점수가 낮은 녀석들 보다는 사탕을 많이 가져야 한다.3-1. 참고로 나랑 점수가 같으면 어떨지는 상관이 없다.풀이 과정 1. 무조건 사탕을 1개만 받는 사람들을 큐에 넣는다. (양옆이 모두 나보다 크거나 같은 경우)2. 그 사람들부터 시작해서 오른쪽 왼쪽 모두 찾는다.3. 다음에 찾은 친구의 점수가 이전 친구보다 높다면, 사탕을 그보다 1개 이상 더 가지고 있어야 한다.4. 그런데, 그 높은 친구의 반대쪽에도 더 점수가 낮은 학생이 있을 수 있다.5. 우리는 이미 모든 위치에서 찾기로 했다. 결국 최종적으로 어떤 학생은 양옆보다 큰 숫자를 가지고 있으면 된다.6. 이렇게 해서 구한 모든 사탕을 더..

알고리즘 공부 2025.01.28

[leetcode - 80. Remove Duplicates from Sorted Array II] java

문제 설명1. 배열이 주어진다.2. 중복을 제거한다.3. 근데 한번의 중복까지는 허용한다.풀이 과정1. 그냥 하나씩 더해가면서 구하면 된다.2. 한번의 중복은 허용하기 때문에 한번 허용했다는 flag를 만들고 활용하면 된다.3. 시작할 때에 index 에 대한 flag는 아직 없기 때문에 이에 대한 방어로직을 처음에 작성해주면 된다.코드class Solution { public int removeDuplicates(int[] nums) { // index 확인 int index = 0; boolean canDup = true; // 중복 추가 허용 여부. 처음 인덱스에 대해서는 중복 추가 가능 true // 처음꺼는 이미 들어가니까 1부터 ..

알고리즘 공부 2025.01.26

[백준 16174번] 점프왕 쩰리 (Large) - java

문제 설명1. 게임판 크기 N 이 주어진다.2. 현 위치의 숫자만큼만 오른쪽 혹은 아래로 이동 가능하다.3. 왼쪽 위부터 시작해서 오른쪽 아래로 갈 수 있는지를 체크하면 된다.풀이 과정1. DFS2. 굉장히 쉬운 문제다. 그냥 위치 확인하고 DFS 해주면 간단하게 풀린다.3. 현재 위치를 지나왔다고 체크하고, 거기서 점프하는걸 하면 해결 가능(근데 나는 살짝 더럽게 풀었는데, 그냥 check라는 배열을 하나 더 만들면 조금 더 깔끔하게 해결 가능하다.)코드import java.util.*;import java.io.*;public class Main{ private static int N; private static int[][] map; private static int[] xMove ..

알고리즘 공부 2024.12.31

[백준 1240번] 노드사이의 거리 - java

문제 설명1. N, M이 주어진다.2. 1~N 의 숫자를 가진 애들이 N-1줄 주어지는데 두 점이랑 거리가 주어진다.3. 그 다음에는 M개의 노드 쌍이 주어진다.4. 3번 과정에 애들에 대해 거리를 출력하면 된다.풀이 과정1. DFS + 백트래킹2. 얘랑 비슷하다.3. 노드를 각자 가지고 있고 그 거리를 DFS로 갱신시키면서 봐주면 된다.4. 그리고 현재 방문한 곳은 check해주고 다시 안보면 된다.코드/****************************************************************************** Online Java Compiler. Code, Compile, Run and Debug java program online. Write your code in..

알고리즘 공부 2024.12.30

[백준 13023번] ABCDE - java

문제 설명1. 사람 수 N, 관계 수 M 이 주어진다.2. 그 다음부터 M 개로 관계들이 주어진다.3. A - B - C - D - E 이렇게 친구인지 여부를 구하면 된다.풀이 과정1. DFS + 백트래킹2. 각 친구 상태를 가지는 ArrayList 를 배열로 가지면 된다.3. 현 사람을 기준으로 모든 관계 ArrayList 를 찾고 주르륵 찾으면 된다.4. 그리고 이전에 확인한 사람인지 체크 여부를 확인해서 백트래킹 해주면 된다.5. 이게 잘 동작하는 이유는 어차피 이전으로 돌아가지 않으니 depth 가 차면 알아서 ABCDE 열차가 완성되기 때문이다.코드/****************************************************************************** Onl..

알고리즘 공부 2024.12.29

[백준 1245번] 산봉우리 - java

문제 설명1. 격자 N M 이 주어진다.2. 맵이 주어지고 높이가 주어진다.3. 현재 높이 기준으로    - 같은 높이 : 같은 산봉우리    - 같은 산봉우리 주변에는 얘보다 낮은 높이밖에 없어야 한다.4. 산봉우리 개수를 구하면 된다.풀이 과정1. DFS문제이다.2. 모든 위치에서 주변 7방향 모두를 확인해준다.3. 그 중에 하나라도 얘보다 높으면 이건 산봉우리가 아니다.4. 같은 높이가 있으면 걔도 같은 산봉우리인지 확인해야 한다. 그 주변 애가 산봉우리가 아니라면 당연히 얘도 아니다.5. 산봉우리인지 체크를 한다면 그거는 모두 방문처리해준다.6. 그리고 산봉우리인지 return해서 호출한 메인쪽에서 확인해서 구하면 된다.코드/****************************************..

알고리즘 공부 2024.12.15

[백준 7490번] 0 만들기 - java

문제 설명1. 테스트 케이스 개수가 주어진다.2. N이 주어지면, 1부터 N 까지 오른차순 수열이 있다.3. '+' '-' ' ' 이렇게 삽입된다. 4. 이렇게해서 1 ~ N 까지의 수식이 완성되었을 때 그 수식의 결과가 0이 되면 그걸 출력한다.5. 참고로 ASCII 순서에 따라 출력한다.풀이 과정1. BF + DFS문제이다.2. String에다가 모든 수식이랑 숫자를 다 DFS로 찾도록 구하고 그걸 처리하면 된다.3. 계산하는 방법은 공백 없이 문자를 이어주고(이러면 알아서 붙음) 수식 위치를 구한 후에 숫자를 뽑아서 이 수식대로 처리해주면 된다.4. 0이 되면 출력5. 참고로 ASCII 순서에 따라 DFS처리하면 간단하다 ' ' -> '+' -> '-' 순서임.코드import java.util.*;..

알고리즘 공부 2024.12.08

[백준 1068번] 트리 - java

문제 설명1. 몇개의 노드가 주어질지 입력2. 순서대로 노드가 주어진다.3. 어떤 노드를 지울지 알려준다.4. 그 노드랑 이 노드의 모든 자식노드를 지원 후 남은 자식노드 갯수 구하기풀이 과정1. 처음에는 그냥 어떤 노드의 자식들을 모두 보관하게 하고 그 노드를 기준으로 자식을 확인해가면서 삭제해줬다.2. 그리고 ans는 처음에 모든 자식없는 노드들을 확인해서 만들어줬다.3. 리프노드 도달시 하나씩 뺴줘서 처리했다.4. 이랬더니 중간에 틀렸는데, 이유를 생각해보니 어떤 노드의 부모가 그 노드만을 자식으로 가진다면 문제가 될 것 같았다.(O-O-O 이렇게 돼있으면 안됨)5. 여러 방법이 있었겠지만... 나는 그냥 그 노드의 부모를 갖는 Map을 하나 더 만들어서 부모 찾고 자식이 하나뿐이면 더해주는 식으..

알고리즘 공부 2024.12.07

[백준 12919번] A와 B 2 - java

한번 틀려서 다시 풀었었다.문제 설명1. S 랑 T가 주어진다.2. S 뒤에 'A' 를 붙이거나, S 뒤에 'B'를 붙이고 뒤집을 수 있다.3. 2번의 연산을 통해서 S랑 T가 같아지면 1, 그렇게 못만들면 0을 출력하면 된다.잘못된 풀이 과정1. BF + DFS문제이다.2. S에서 위의 연산을 하나씩 수행해간다.    - A를 붙여줌    - B를 붙이고 뒤집음3. 그리고 길이가 T랑 같아졌을 때 비교해서 처리한다.    - (틀린 이유) 시간초과가 발생했는데 모든 경우에서 시간복잡도가 2^N이 되기 때문이다.6. S로부터 시작해서 T가 될 때까지 2번씩 N번 수행된 것.코드import java.util.*;public class Main{ private static String T; pri..

알고리즘 공부 2024.12.04