Lv 2. 호텔 대실
·
Algorithm & Data Structures/Programers
코드 흐름ArrayList 를 방의 갯수로 잡고String[][] book_time으로 들어오는 book_time[][0] 과 book_time[][1] 이 호텔 예약 시작과 끝시간 이라는것을 알아야 한다.Arrays.sort()를 하였을때 String을 비교할 수 있는 compare함수를 Override 해주어야 하고String 형태의 예약시간을 1440 까지 분단위로 존재하는 Integer 형태로 바꾸어 주었다. 바꿈과 동시에 10분을 끝시간에 더하여 호텔의 정비시간을 잡았다.이 코드안에서 놓치기 쉬운 두가지 포인트는 Collections.sort로 rooms 의 리스트들을 오름차순으로 정렬하여 가장 오랬동안 쓰이지 않은 방을 먼저 분배하는것과분배되고나서 break 문을 실행하여야 한다는 것이다.im..
Lv 2. 시소 짝궁
·
Algorithm & Data Structures/Programers
코드 흐름 weight을 정렬하여 낮은것 부터 차례대로 확인한다.foreach문을 통해 weights 에 담긴 무게들을 하나하나 낮은것부터 확인한다.a, b, c, d 즉 100이 들어오면 시소 짝궁을 이룰 수 있는 숫자들을 모두 만들어 둔다.만약 a,b,c,d가 map에 존재한다면 그 갯수를 answer에 더한다.이후 i 를 확인했으므로 map에 getOrDefault 문을 사용하여 i무게의 갯수를 적어둔다. import java.util.*;class Solution { public long solution(int[] weights) { long answer = 0; Arrays.sort(weights); Map map = new HashMap(); ..
Lv 2. 마법의 엘리베이터
·
Algorithm & Data Structures/Programers
class Solution { public int solution(int storey) { int answer = 0; while (storey > 0){ int n = storey % 10; storey /= 10; if(n == 5){ if(storey % 10 >= 5){ answer += (10 - n) ; storey ++; } else answer += n; } else if (n > 5..
Lv 2. 연속된 부분수열의 합
·
Algorithm & Data Structures/Programers
코드 흐름투포인터 알고리즘을 사용하였다.left, right 를 지정하는 변수를 두고 right를 while 문을 통해서 계속 늘려가면서 sum 이 k를 넘어갈때까지 더한다.이후 left를 더하고 sum에서 left칸의 sequence 원소를 빼면서 sum과 k를 비교한다.문제조건에 맞게 부분수열의 길이가 짧다면 최신화한다.class Solution { public int[] solution(int[] sequence, int k) { int N = sequence.length; int left=0, right = N-1; int sum = 0; for(int i = 0, j = 0 ; i (j-i)) { ..
Lv 2. 큰 수 만들기
·
Algorithm & Data Structures/Programers
코드 흐름 그리디 탐욕법을 이용하여 문제를 풀이하였다.StringBuilder를 선언하고 for 문으로 i 에서 number.length() - k 까지 루프를 돈다.for 문을 통해 idx 에서 i + k 까지 중 최대값을 찾아낸다.max 를 최신화하고 sb에 저장한다.sb.toString()을 리턴한다.class Solution { public String solution(String number, int k) { String answer = ""; int idx = 0; StringBuilder sb = new StringBuilder(); for(int i = 0; i
Lv 2. 두 큐 합 같게 만들기
·
Algorithm & Data Structures/Programers
코드 흐름두 Queue의 합을 구하고q1 의 sum 이 q2의 sum 보다 작다면q1에 q2.poll() 값을 더하고sum1 과 sum2를 최신화하여 다음 으로 넘어간다.위와같은 로직은 최대 이동 횟수 4*queue1의 갯수 가 될때까지 반복된다.import java.util.*;class Solution { public long solution(int[] queue1, int[] queue2) { int answer = -2; long sum1=0,sum2=0; Queue q1 = new ArrayDeque(); Queue q2 = new ArrayDeque(); for(int a : queue1){ sum1+=a;..
Lv 2. 삼각달팽이
·
Algorithm & Data Structures/Programers
코드 흐름 위 문제의 규칙은 n각형을 만들때 n번의 반복문을 돈다는 것이다.n이 3인 삼각형이면 123,45,6 으로 3번n이 4인 삼각형이면 1234,567,89,10 으로 4번n이 5인 삼각형이면 12345,6789,101112,1314,15로 5번즉 for문을 2번돌고 갯수를 줄여나가면 2차원배열에1         1                    126       2   10             2   12345     3   8   9          3   13  11           4   5   6   7     4   14  15 10                                 5   6     7   8   9와 같이 저장된다.이를 ArrayList에 담아 retu..
Lv 2. 소수찾기
·
Algorithm & Data Structures/Programers
코드 흐름DFS로 순열을 만들어 하나하나 의 가짓수를 만드는 DFS 함수하나하나의 가짓수가 나올때마다 소수인지 체크하는 check 함수를 만들어 풀이하였다.소수판별은 가장 효과적인 n의 제곱근까지 반복문을 돌려 확인하였고시간복잡도를 위해 가짓수의 중복판별은 Set 을 이용하였다.import java.util.*;class Solution { Set isVisited; int answer; boolean[] numbersVisited; public void DFS(int n, int s, String numbers){ if(n>=0 && !isVisited.contains(s)){ if(check(s)) answer++; ..
Lv 2. 쿼드압축 후 갯수 세기
·
Algorithm & Data Structures/Programers
코드 흐름백준에서 많이 풀어본 문제 유형이었다.재귀를 통해서 4가지 분기를 만들어 풀이하였다.import java.util.*;class Solution { public int one = 0 , zero = 0; public int[] solution(int[][] arr) { ck(0,arr[0].length,0,arr[0].length,arr); int[] answer = {zero, one}; return answer; } public void ck(int sx, int ex, int sy, int ey , int[][] arr){ int num = arr[sx][sy]; if(ex-sx != 1 && ey-sy !..
Lv 2. 가장 큰 수
·
Algorithm & Data Structures/Programers
코드 흐름Arrays.sort에서 compareTo로 조건을 바꿀 수 있다면 상당히 쉬운 문제이고 아니면 상당히 어려운 문제이다.number를 하나하나 비교하는것 보다 String으로 바꾸어 숫자의 우위를 판단하는것이 더 유리해 보여 String으로 배열을 변환한다.Arrays.sort 에서 조건을 o1+o2와 o2+o1을 비교하는식으로 비교한다.  (o2+o1).compareTo(o1+o2) 이렇게 하면 내림차순으로 가능하다.만약 arr[0] 이 0이라면 이는 0밖에없는 배열이므로 return "0"이후 StringBuilder를 통해 연결해주고 sb.toString을 return  import java.util.Arrays;public class Solution { public String so..