본문 바로가기

Algorithm

(9)
[Algorithm/Java] 배열과 리스트 배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조 인덱스를 통해 배열의 값 참조 가능 배열의 특징 인덱스를 사용해 값에 바로 접근 가능 삽입, 삭제가 어려움 → 해당 인덱스 주변에 있는 값을 이동시키는 과정 필요 배열의 크기는 선언 시 지정 가능, 한 번 선언한 후 크기를 늘리거나 줄일 수 없음 구조가 간단하여 코딩 테스트에서 많이 사용 리스트 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 노드: 값, 포인터를 쌍으로 갖는 기초 단위 리스트의 특징 인덱스가 없으므로 head 포인터부터 순서대로 접근해야 함 → 접근 속도가 느림 포인터로 연결되어 있어 삽입/삭제하는 연산 속도가 빠름 크기를 별도로 지정하지 않아도 됨 → 가변 데이터에 적절 포인터를 저장할 공간이 필요하여 구조가 복잡
[Algorithm/Java] 디버깅 디버깅(Debugging): 문법/논리 오류를 찾아 바로잡는 과정 디버깅 방법 코드에서 디버깅하고자 하는 줄에 중단점 설정 IDE의 디버깅 기능을 이용해 변숫값이 의도대로 바뀌는지 파악 변숫값 이외에도 원하는 수식을 입력해 논리 오류 파악 가능 가장 하기 쉬운 실수: 자료형 범위 오류 변수를 처음부터 long으로 설정할 것
[Algorithm/Java] 시간 복잡도 시간 복잡도: 주어진 문제를 해결하기 위한 연산 횟수 1억번의 연산 → 1초로 간주 빅 오메가(Ω(n)): best case 빅 세타(θ(n)): average case 빅 오(O(n)): worst case → 코딩 테스트에서의 기준 버블 정렬: O(n^2) 병합 정렬: O(nlogn) 연산 횟수 = 시간 복잡도 * 데이터 크기 시간 복잡도 도출 기준 상수는 시간 복잡도 계산에서 제외 가장 많이 중첩된 반복문(이중 for 문이 있으면 그게 기준)의 수행 횟수가 시간 복잡도의 기준
[Programmers/MySQL] STRING, DATE 문제 풀이 모음 1. 자동차 대여 기록에서 장기/단기 대여 구분하기 SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE, DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE, IF(DATEDIFF(END_DATE, START_DATE) >= 29, '장기 대여', '단기 대여') AS RENT_TYPE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE LIKE '2022-09%' ORDER BY HISTORY_ID DESC; 2. 루시와 엘라 찾기 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE..
[Programmers/MySQL] JOIN 문제 풀이 모음 1. 상품 별 오프라인 매출 구하기 SELECT PRODUCT.PRODUCT_CODE, SUM(PRODUCT.PRICE * OFFLINE_SALE.SALES_AMOUNT) AS SALES FROM PRODUCT JOIN OFFLINE_SALE ON PRODUCT.PRODUCT_ID = OFFLINE_SALE.PRODUCT_ID GROUP BY PRODUCT.PRODUCT_ID ORDER BY SALES DESC, PRODUCT.PRODUCT_CODE; 2. 조건에 맞는 도서와 저자 리스트 출력하기 SELECT BOOK.BOOK_ID AS BOOK_ID, AUTHOR.AUTHOR_NAME AS AUTHOR_NAME, DATE_FORMAT(BOOK.PUBLISHED_DATE, '%Y-%m-%d') AS PU..
[Programmers/MySQL] IS NULL 문제 풀이 모음 1. 이름이 없는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL ORDER BY ANIMAL_ID ASC; 2. 이름이 있는 동물의 아이디 SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID ASC; 3. 나이 정보가 없는 회원 수 구하기 SELECT COUNT(USER_ID) AS USERS FROM USER_INFO WHERE AGE IS NULL; 4. 경기도에 위치한 식품창고 목록 출력하기 SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) AS FREEZ..
[Programmers/MySQL] GROUP BY 문제 풀이 모음 1. 입양 시각 구하기(1) SELECT HOUR(DATETIME) AS HOUR, COUNT(*) FROM ANIMAL_OUTS GROUP BY HOUR HAVING HOUR BETWEEN 9 AND 19 ORDER BY HOUR; 2. 입양 시각 구하기(2) SET @hour := -1; SELECT (@hour := @hour + 1) as HOUR, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) as COUNT FROM ANIMAL_OUTS WHERE @hour < 23 3. 동명 동물 수 찾기 SELECT NAME, COUNT(*) FROM ANIMAL_INS WHERE NAME IS NOT NULL GROUP BY NAME H..
[Programmers/MySQL] SUM/MAX/MIN 문제 풀이 모음 1. 최댓값 구하기 SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1; 2. 중복 제거하기 SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS; 3. 동물 수 구하기 SELECT COUNT(*) FROM ANIMAL_INS; 4. 최솟값 구하기 SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1; 5. 가장 비싼 상품 구하기 SELECT PRODUCT.PRICE AS MAX_PRICE FROM PRODUCT ORDER BY PRICE DESC LIMIT 1; 6. 가격이 제일 비싼 식품의 정보 출력하기 SELECT PRODUCT_ID, PRO..