solution 8

[leetcode - 49. Group Anagrams] java

문제 설명1. 문자열의 배열이 주어진다.2. 아나그램(문자를 섞어서 같은 것들)을 묶으면 됨3. 순서는 상관 없음풀이 과정(느린풀이)1. 처음에는 간단하게 이중 map으로 구했다.2. 빈도수를 가진 map 을 만들고, 그 map을 다시 key로 가지면서 value 에 String 들을 List로3. 딱봐도 느릴것같았는데 최저속도로 통과했다ㅋㅋ코드class Solution { public int[][] merge(int[][] intervals) { // 정렬에 대한 얘기가 처음에 없음. 근데 시작점만 정렬해주면 될듯? Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // 최초 배열 만..

알고리즘 공부 2025.03.03

[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

[백준 1043번] 거짓말 - java

문제 설명1. 사람 수, 파티의 수가 첫 줄에 주어지고2. 둘쨰 줄에는 이야기의 진실을 아는 사람의 수와 번호가 주어진다.3. 그 다음부터는 파티의 갯수만큼 사람들이랑 그 사람의 번호가 주어진다.4. 진실을 아는 사람이 속한 파티나, 그 사람이랑 같은 파티에 한번이라도 참가한 사람이 있거나, 같은 파티에 참석한 점이 있는 사람이 한명이라도 있는 파티에서는 거짓말을 못한다.5. 거짓말 할 수 있는 파티 수를 구하면 된다. 풀이 과정 1. 유니온 파운드 문제이다. 2. 모든 사람의 관계를 조사해서, 진실을 아는 사람이 같은 유니온에 들어가있는지 파악하면 된다. 3. 사실 그렇게 어려운 문제는 아니겠지만(아니겠지?) 유니온 파인드에 관한 지식은 가지고 있어야 풀 수 있다. 한번 브루트포스로 풀어보려 했더니 당..

알고리즘 공부 2024.10.20

[백준 3109번] 빵집 - java

문제 설명1. R*C 격자가 주어지고, '.'은 갈 수 있는 길 'X' 는 갈 수 없는길(건물) 이다.2. 왼쪽 끝에서부터 시작해서 오른쪽 끝으로 연결이 가능하면 파이프가 이어지는것.3. 하나의 시작점에서는 하나만 도달한다.4. 이미 연결되면 그 다음에는 연결되지 않는다.5. 그래서 도달한게 몇개인지 맞추면 된다. 풀이 과정 1. DFS, 그리디이다. 2. 백트래킹도 가능할 것 같기는 한데... 나는 DFS로 풀었고 그 이유는 3. 위에서부터 아래로 가면서, 그리고 위로 가면서 확인하면 결국 갈 수 있는 길 자체가 정해진다.(그리디의 일종?) 4. 즉, 위에서부터 확인하고 올라가기 - 직선 - 내려가기 할 때에 위에서 이미 갔으면 그거 자체가 하나의 루트가 된다. 즉 아래에서 이거때문에 못간다고 해도 달..

알고리즘 공부 2024.10.13

[백준 13422번] 도둑 - java

문제 설명1. 맨 윗줄은 테스트 케이스 갯수2. 2줄씩 받고 -> 처음은 [집갯수, 훔칠 집 수, 훔칠 금액 최대값+1] / 두번째는 [집들의 가진 돈] 이 주어진다.3. 도둑이 훔치려고 할 때에 인접한 집을 찾아가면서 훔치고 일정 금액 이상 훔치거나 일정 집 수 이상 훔치면 잡혀감4. 그 안에서 훔칠 경우의 수를 구하면 된다. 풀이 과정 1. 간단한 슬라이딩 윈도우 문제이다. 2. 집을 하나씩 찾으면서 보면 된다. 3. 그리고 보면 그냥 배열이랑 좀 다른거는 처음 맨 뒤쪽 집들은 최초 털어간 집에 대한 확인도 된다는거 4. 내가 풀어낸 방식은 그래서 [123][234][345][451][512] 이렇게이다. 5. 근데 여기서 중요한건 M == N 이면, 4번 방식에서 [123][231][312] 가 된..

알고리즘 공부 2024.10.12

[HackerRank] 2d-array java 풀이

문제 설명1. 배열에 대해 1 1 10 1 01 1 1요만큼 해당하는 애들만 더하는것2. 크기는 정해져 있다. 풀이 과정 1. 어차피 크기는 정해져 있으니 내부에서 돌면서 저만큼 구해서 더해주면 된다. 2. 0 ~ n 의 크기라고 하면 1 ~ n-1 까지 구하면 된다는 느낌 3. 각 위치에 대해서 미리 갖고 있고 이걸로 사용할 것을 정하면 된다.    https://www.hackerrank.com/challenges/2d-array/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays

알고리즘 공부 2024.10.09

[HackerRank] repeated-string java 풀이

문제 설명1. s 문자열이 n개 숫자가 될 때까지 반복된다.2. 그 문자에서 'a' 의 갯수를 구하면 된다.3. n의 크기는 크다. 풀이 과정 1. n이 길어서 브루트포스는 안된다. 2. 처음 문자열에서 a의 갯수를 구함 3. n만큼의 길이 내에서 저 문자열이 몇번 반복되는지 구해서 그만큼 곱한다. 4. n에서 반복된 후에 나머지 짜잘한 애들 중 a가 몇개 있는지 구해서 더하면 된다.     https://www.hackerrank.com/challenges/repeated-string/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

알고리즘 공부 2024.10.08

[HackerRank] Jumping on the Clouds java 풀이

문제 설명1. 간단한 DP 문제이다.2. '0' 만 밟을 수 있다고 생각하면 편하다.3. 현재 위치에서 1칸 2칸을 점프할 수 있다.4. 그래서 마지막까지 몇번의 점프가 최소인지를 구하면 된다. 풀이 과정 1. 간단하다. 0부터 시작해서 마지막까지 가고, 지금 다음 구름에는 현재 위치에서 점프하는 때(현위치 값 + 1)가 최소인지 파악해서 넣어주면 된다. 2. 1은 그냥 넘기면 된다. 3. 끗  https://www.hackerrank.com/challenges/jumping-on-the-clouds/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

알고리즘 공부 2024.10.07
1