분류 전체보기 104

leetcode 448 Find All Numbers Disappeared in an Array [JAVA]

리뷰1~n의 값을 넣은 list를 만든 후, 제시된 배열을 순회하는 반복문을 돌리고 list.contains()를 사용해 배열값의 포함 여부를 확인했다. 시간 초과 문제가 발생했고 이를 해결하기 위해 HashSet과 카운팅정렬로 다시 풀어보았다. 시간초과 : list.contains()사용  ---> 22ms : set.contains()사용  ---> 3ms : 카운팅 정렬 공부한 것작은 범위의 정수를 정렬할 땐 카운팅 정렬을 고려하자.  HashSet vs 카운팅 정렬 속도차이  [gpt]  두 알고리즘 모두 시간 복잡도가 O(N)입니다. 시간 복잡도가 같다고 해도, 실제로 실행 속도는 알고리즘의 구현 방식과 데이터 구조, 환경 등에 따라 달라질 수 있습니다. 카운팅 정렬이 더 빠른 이유는 다음과 같..

ALGORITHM 2024.06.22

sql 문제풀이 조각 모음 [MYSQL]

1. !=  사용 시 null은 포함되지 않는다.-- [!=2] : 2를 제외한 숫자만 출력select name from Customer where referee_id != 2-- [!=2 and is null] : 2가 아닌 수 + null 출력select name from Customer where referee_id != 2 or referee_id is null 2. null이 아닌 값을 찾을 땐 is not null 을 사용한다. ( != null (x)) 3. coalesce() : 해당 컬럼값이 null일 시 대체할 값을 설정한다. coalesce(컬럼명, 대체값)select Prices.product_id, coalesce(round(sum(price*units)/sum(units),2),..

ALGORITHM 2024.05.22

leetcode 1517 Find Users With Valid E-Mails [MYSQL]

리뷰공부한 것RLIKE, REGEX 함수 - 문자열 패턴을 정규표현식을 사용해서 비교하고 일치 여부를 확인한다.-- regular like, regular expressionRLIKE '^[조건 범위]'REGEX '^[조건 범위]'  정규표현식  a-zA-Z : 알파벳0-9 : 숫자^ : 문자열 시작 표시[] : 범위 설정+ : 조건 잇기$ : 문자열 종료 설정. 설정하지 않으면 뒤에 문자열이 추가될 수 있다.* : 직전의 조건 범위를 충족하는 문자의 개수는 0 이상이다.\\. : 메타문자인 도트 앞에 이스케이프 문자(역슬래시) 두개 붙이기 문제더보기더보기Table: Users+---------------+---------+| Column Name | Type |+---------------+-..

ALGORITHM 2024.05.20

leetcode 1731 The Number of Employees Which Report to Each Employee [MYSQL]

리뷰셀프조인이 생각 안 나서 오래 고민했다. "the number of employees who report directly to them  by managers" 이 부분이 문제였는데, count(reports_to)로 적으니 group by에 적용돼서 0 출력. 서브쿼리를 사용해서  count(employee_id)를 출력하려고 하니까 이경우엔 group by에 적용시킬 수가 없었다. 공부한 것the average age of the reports rounded to the nearest integer. 반올림-- CEILING (x)round(avg(table2.age)) 문제더보기1731. The Number of Employees Which Report to Each Employee Solved..

ALGORITHM 2024.05.10

leetcode 197 Rising Temperature [MYSQL]

리뷰 공부한 것Lag() - 이전 행 값을 가져온다LAG(값을 추출할 컬럼, 행 간격, default) OVER (PARTITION BY partition_col ORDER BY 기준 컬럼) DATE_SUB() - 날짜, 시간 뺄셈date_sub(날짜, interval 간격 day)date_sub(시간, interval 간격 hour)-- date_add() 날짜, 시간 덧셈 Every derived table must have its own alias서브쿼리 테이블을 만든 후 이름을 붙여야 한다. (서브쿼리 결과를 바로 사용하는 경우에는 별칭을 붙이지 않아도 되지만, 서브쿼리 결과를 후속 작업에서 참조하려는 경우에는 별칭이 필요할 수 있습니다.) Unknown column 'temperature' i..

ALGORITHM 2024.04.21

백준 20920 영단어 암기는 괴로워 [JAVA]

리뷰 시간초과 문자열과 중복 개수를 HashMap에 넣는 부분에서 시간 초과가 발생했다. List에 문자열을 모두 입력받은 후 Set에 저장해 중복을 제거하고 Set을 Iterator 반복문을 돌려 각 문자열이 원본 List에 몇개씩 있는지 체크했다. 시간초과 문제를 해결하기 위해 getOrDefault메소드를 사용하여 입력과 동시에 빈도수를 카운트하도록 했다. 공부한 것 getOrDefault(Object key, V DefaultValue) : map에 key가 있으면 value리턴, 없으면 defalutValue리턴 if (word.length() >= m) { Integer count = hm.getOrDefault(word, 0); hm.put(word, count + 1); } 정렬 비교 숫자..

ALGORITHM 2024.03.19

백준 1010 다리놓기 [JAVA]

리뷰 실패 동쪽 개수에서 서쪽 개수를 택하는 조합 nCr을 사용했다. 해당 수식의 팩토리얼 계산 시 long타입 범위 초과로 0이 출력되는 문제가 생겼다. 이를 해결하기 위해 무한대 정수를 계산할 수 있는 BigInteger클래스를 사용하였다. 공부한 것 BigInteger클래스 사용법 BigInteger result = new BigInteger("0"); //선언 result.multiply(number); //곱셈 result.divide(number); //나눗셈 result.add(number); //덧셈 result.substract(number); //뺄셈 result.remainder(number); //나머지 BigInteger.valueOf(j) // 형변환 문제 더보기 문제 재원이는 ..

ALGORITHM 2024.03.11

백준 11659 누적합 [JAVA]

리뷰 시간초과 List로 입력을 받고 반복문으로 각 값을 얻어서 누적합을 구했다. 시간초과 문제를 해결하기 위해, List에 입력받을 때 바로 각 수를 더한 뒤 누적합으로 입력받았다. 문제 더보기 문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 제한 1 ≤ N ≤ 100,000 1 ≤ M ≤ 100,000 1 ≤ i ≤ j ≤ N 예제 입력 1 복사 5 3 ..

ALGORITHM 2024.02.09

백준 2485 가로수 [JAVA]

리뷰 시간초과 모든 수를 각각 비교해 최대공약수(간격)를 계산한 뒤, 모든 가로수 값을 HashSet에 저장해 중복을 확인했다. 시간초과 문제를 해결하기 위해 유클리드 호제법으로 최대공약수를 구하고, 추가한 가로수는 HashSet에 저장하지 않고 count++ 연산으로 체크했다. 더보기 두 부분 다 수정해야 한다. HashSet을 삭제해도 모든 수를 반복문 돌려서 최대공약수를 구하면 시간초과가 뜨고, 유클리드호제법을 사용해 최대공약수를 구하더라도 HashSet으로 개수를 카운트하면 메모리 초과가 뜬다. 공부한 것 여러수의 최대공약수 - 유클리드호제법 먼저 두 수를 골라 최대공약수를 구한다. 그 값(최대공약수)과 남은 수 중 하나의 최대공약수를 구한다. 위 과정을 반복한다. 두수의 최대공약수 - 유클리드호..

ALGORITHM 2024.02.08

백준 11650 좌표 정렬하기 [JAVA]

리뷰 시간초과 2차원 배열로 값을 입력받은 후, 반복문을 돌려서 모든 값을 하나씩 비교했다. 공부한 것 1차원 배열 정렬 시 사용하는 Arrays.sort(arr)의 인자로 Comparator인터페이스의 Compare메소드를 오버라이딩해 추가하면 2차원 배열도 정렬할 수 있다. Arrays.sort(arr, new Comparator() { //한번만 사용되기때문에 익명클래스(익명구현객체) 사용 public int compare(int[] arr1, int[] arr2) { //2차원 배열을 2개씩 비교 if (arr1[0] != arr2[0]) { // 두 2차원 배열의 x값 비교 return arr1[0] - arr2[0]; // 오름차순 정렬(양수면 순서바꿈, 음수면 그대로둠). 앞 뒤 바꾸면 내림..

ALGORITHM 2024.02.06