본문 바로가기

전체 글226

[프로그래머스] 기능개발 (Java) 문제 정보  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 교훈점1. [5, 10, 1, 1, 20, 1] 에서 모든 배열의 원소값을 [0] 인덱스의 값 만큼 빼서 [0, 5, -4, -4, 15, -4] 로 만들고 싶을 때 아래와 같이 코드를 작성하면 안된다.for(int i=0; i왜냐하면 deploy[0]의 값이 0으로 바뀌어서 i가 1부터는 deploy[1] -= 0; 의 꼴이 되어버린다. 이런 경우 아래 코드와 같이 deploy[0] 을 다른 변수에 저장해두고 사용해야 한다.int minus = deploy[0];for(int i=0; i  1. 배열로 풀이 O(n^2)1. 배포까지의 걸리는 .. 2025. 3. 22.
[Stack 응용] Monotonic Stack 두 줄 요약각 element를 오름 차순, 내림 차순으로 유지하는 알고리즘 기법 특정 기점에서 최초로 커지거나/작아지는 시점을 구하고 싶을 때 사용 배열에서 다음보다(순서 중요) 큰 element나 작은 element를 찾는 문제를 O(n) 이라는 시간에 효율적으로 해결할 수 있다. 즉,1) 배열의 순서가 중요하고 (그 순서를 기점으로 계산해야 하기 때문에)2) 어떤 기점에서 크거나 작은 요소를 찾아야 하는 문제3) O(n^2)으로 해결할 수 없고, O(n)으로 해결해야 하는 경우 1) && 2) && 3) 의 해당하는 경우 Monotonic Stack을 사용하면 된다.온도 문제로 생각해보는 Monotonic Stack의 필요성각 일마다 온도를 순서대로 나타내어 temperatures 배열에 아래와 같이.. 2025. 3. 22.
해시 테이블(Hash Table)과 해시 충돌(Hash Collision) 쉬운 개념 정리 Array VS Hash TablePizza50$Coke15$Tea3$Burger20$ Java에서 위 메뉴를 배열로 저장하고 Coke의 가격을 찾으려면 아래와 같이 O(N)의 순회를 하며 찾아야 한다.String[][] menu = { {"Pizza", "50"}, {"Coke", "15"}, {"Tea", "3"}, {"Burger", "20"}};// 출력 예시for (String[] item : menu) { if(item[0].equals("Tea")) { System.out.println(item[0] + " : " + item[1] + "$"); }} 이를 좀 더 빠르게 찾을 수 없을까?이럴 때 Hash Table을 사용하면 된다. 이 경우 O(1)으로 순회.. 2025. 3. 21.
[JAVA] 🌟프로그래머스 - 달리기 경주 교훈점해시 테이블의 필요성을 알 수 있는 문제 (탐색하는데 n의 개수가 클 때) 배열로 순회하여 풀이 추월한 선수의 index 값을 알아내서 그 앞에 있는 선수와 swap 하면 간단하게 해결할 수 있다.즉, callings 배열을 순회하면서 동시에 players 배열들을 순회해야 한다.그러나, 제한 사항이 callings 배열의 길이가 최악의 경우 100만, players의 배열의 길이가 최악의 경우 5만이다.따라서 최악의 경우 500억의 연산이 일어나므로 시간 초과가 난다.  -> 순회를 할 때 시간을 줄여야 한다.Hash Table 사용배열은 어떤 원소를 찾기 위해 순회할 경우 시간 복잡도가 O(n)이다.Hash Table은 어떤 원소를 찾으려면 O(1)으로 해결이 가능하다.(이름, 순위) 를 담는 .. 2025. 3. 21.
[SQL] 재귀 쿼리 (WITH RECURSIVE) 이해하기 SQL 계의 반복문 WITH RECURSIVE란?재귀적(반복적)으로 어떤 쿼리를 실행하기 위해 만든 임시 테이블이다.with RECURSIVE hour_tbl as( SELECT 0 as HOUR -- 초기 구문 UNION ALL -- 반복해서 실행할 구문 SELECT HOUR+1 FROM hour_tbl WHERE HOUR  문법 형태는 위와 같다.SELECT 0 as HOUR 구문을 초기 구문으로 하고 UNION ALL 이후 구문을 반복해서 실행할 구문으로 두면 된다. 실행하면 아래와 같다. 이 구문의 원리를 쉽게 이해해보자.SELECT 0 as HOUR 는 마치 int HOUR = 0; 과 같은 초기 선언과 같다.UNION ALL 구문은 두 SQL문의 결과를 합치는 것이다.S.. 2025. 3. 20.