목록Algorithm (58)
개발일기

https://school.programmers.co.kr/learn/courses/30/lessons/12926 import java.util.*;class Solution { private static final char[] SMALL_ALPHA = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; private static final char[] BIG_ALPHA = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J..
이번 문제를 풀 때, 컨셉은 최대한 직관적이고 누가보아도 어떤 코드인지 알 수 있는 코드를 만드는 것 입니다. 앞으로도 코딩테스트 문제를 푸는 것도 중요하겠지만 최대한 직관적인 코드를 작성하려고 노력 할 것입니다. import java.util.*;class Solution { public int[] solution(long n) { String reverse = getReverseNumber(n); return reverse.chars().map(Character::getNumericValue).toArray(); } private String getReverseNumber(long n) { return..
class Solution { public int[] solution(int n) { int v = 1; int x = 0; int y = 0; int[][] arr = new int[n][n]; while(true) { // 아래로 이동 while(true) { arr[y][x] = v++; if(y+1==n || arr[y+1][x] != 0) { break; } y+=1; } ..
해당 문제는 투포인트 알고리즘을 통해 풀었다. 투포인트 알고리즘이란 이중 포문을 통해서 구해야하는 공식을 왼쪽 끝, 오른쪽 끝 양끝점을 기준으로 조금씩 좁혀오며 범위를 계산해주어 푸는 문제이다. 아래 문제같은 경우에도 겹치는 최소부분을 구하기 위해 양쪽 끝을 기준으로 겹치지 않는 보석이 있을 때까지 범위를 좁혀주어 HashSet에 들어가있는 보석의 개수 크기만큼 종류의 개수를 구해주어 문제를 해결하는 방식으로 구현하였다. import java.util.*;class Solution { public int[] solution(String[] gems) { int kind = new HashSet(Arrays.asList(gems)).size(); ..

위에 그림 처럼 구조가 될 것이다. paraent배열에 들어있는건 부모 노드의 번호가 된다. 이 기준으로 find를 한다면 부모 노드를 통해서 구해지기에 이걸 통해서 비교를 해주고 이미 지나간 것은 동일하기에 최소 값을 기준으로 구할 수 있다. 해당 문제는 신장트리 , 크루스칼 알고리즘 , 유니온 - 파인드 알고리즘을 통해서 구했다. import java.util.*;class Solution { private int[] parent; public int find(int a) { if(parent[a]==a) return a; else return parent[a] = find(parent[a]); } public void union(int a, i..
호텔 방 배정은 containsKey를 통해서 존재하는지 안하는지 여부를 찾아야한다. 또한 이를 통해서 존재하지 않다면 바로 hotelMap넣어준다. emptyRoomNumber는 findHotelRoom을 통해서 비어있는 방을 찾아서 가져온다. parentRoomNumber를 하면 비어있던 놈을 가져오고 해당 하는 애도 비어이지 않다면 get을 통해서 빈방을 계속해서 찾아준다.이렇게 해준 덕분에 값을 바꿔치면서 비어있는 것을 기준으로 가져 올 수 있음. import java.util.*;class Solution { private static Map hotelMap = new HashMap(); public long[] solution(long k, long[] room_nu..
문제 풀이1. index가 기준이다. 즉, index가 시간이라 생각하고 stack에 담아서 구한다.2. 가격을 비교하는 로직을 준비한다. 단 , 이때 while문을 사용하여 현재 인덱스 기점의 prices값보다 크다면 계속해서 비교하여 인덱스로 경과시간을 구해준다.3. 위에와 같이 비교한 인덱스는 answer를 구했기에 stack에서 pop해준다.4. 마지막으로 들어간 값과 인덱스가 계속 증가한 값을 비워주기 위하여 stack이 비어있을 때까지 구해준다. 이때, length 에서 인덱스에서 -1 을 해주는데 0번 인덱스부터 시작하기 때문이다. import java.util.*;import java.util.stream.IntStream;class Solution { public int[] sol..
문제 풀이1. 타당성 검토 메소드 구현 -> position을 통해 시작 위치에서 하나씩 더해서 올바른 위치에 있는지 확인하기 2. process 메서드에서 ), }, ] 만 stack push why? pop을 해서 현재 위치해서 구해지는 값을 비교하기 위하여 3. isValidate 안에 stack 선언하기 매번 타당성을 확일 할 때, 초기화하여 가져와야하기 때문에, static으로 전역 변수 선언 x 4. stream 에서 final 값이 아니면 원자값 AutomicInteger로 포장하여 사용 import java.util.*;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream;class Soluti..