본문 바로가기

CS

(26)
[엘리스 알고리즘 코드 챌린지] Day 9. 격자 위의 ELICE (Java) 문제제한 시간 : 7초핵심다익스트라 알고리즘을 사용하여 각 문자 위치 간의 최단 경로를 찾을 수 있다.다익스트라 알고리즘의 시간 복잡도: O((V+E)logV), 여기서 V는 노드의 수, E는 간선의 수전체 시간 복잡도: O(N^2 log N^2)N이 1000일 때, 대략 1000^2 * log(1000^2) ≈ 10^8 정도의 연산이 필요하므로 7초 내에 충분히 해결 가능 전체 경로는 (1,1) -> E -> L -> I -> C -> E 순서로 이동하는 최단 경로의 합이 된다.단 E는 두 개이므로 둘 중 어느 것을 먼저 방문했을 때, 더 빠른지 고려해야 한다.Code (Java)import java.util.*;class Main { static int N; static int[][] gr..
[엘리스 알고리즘 코드 챌린지] Day 5. 수열 복원 (Java) 문제핵심핵심 로직단순한 방법으로는 모든 부분 수열의 합 조합을 제거하는 것이다.수열이 [1, 2, 4] 인 경우를 생각하면모든 부분 수열의 합은 아래와 같다.0a1a2a3a1 + a2a1 + a3a2 + a3a1 + a2 + a3 a1, a2, a3는 원래의 수열이고 그 외의 것들은 a1, a2, a3를 조합하여 합한 것임을 알 수 있다.따라서 주어진 부분 수열의 합을 정렬하고 작은 수부터 짝지어 합한 후 제외하면 결과적으로 원래의 수열이 남게 된다. 예를 들어 [0 1 2 3 4 5 6 7] 이 주어졌다면, 일단 공집합 0을 제외하고1 + 2 = 3 제거 [1 2 3 4 5 6 7]1 + 4 = 5 제거 [1 2 3 4 5 6 7]1 + 6 = 7 제거 [1 2 3 4 5 6 7]2 + 4 = 6 제거..
[Programmers] JOIN > 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 핵심11월에 렌탈이 가능하려면?렌탈 기록에서 시작일이 12월 1일 0시 전이면서 동시에 종료일이 11월 1일 0시이거나 그 후면 대여 기간이 11월에 겹친다.그렇다면 이러한 기록이 있는 차는 모두 대상에서 빼야한다.나는 WHERE 조건절에 NOT IN, Subquery를 사용하여 이를 처리하였다.WHERE CAR_ID NOT IN( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE = '2022-1..
[엘리스 알고리즘 코드 챌린지] Day 4. 트리 위의 게임 (Java) 문제핵심두 플레이어는 항상 최선의 선택을 한다고 하였다.내부 노드는 후공이 최대한 낮은 점수를 받도록 다음 노드를 선택해야한다.리프 노드에서는 선공이 항상 승리한다. (공격하고 바로 끝나기 때문에)내부 노드에서 시작하는 경우는 최종 결과가 자식 노드의 결과와 연관되어 있다.그리고 리프 노드에서 시작하는 경우는 확정적이기 때문에 리프 노드에서 시작하는 경우를 기반으로 루트에서 시작하는 경우까지 점차 확장해가면 해결할 수 있다.구현1번 예제의 트리 모양은 아래와 같다.  1 /|\2 3 5 /4 이를 기반으로 구현을 한다면 DP 테이블 정의D[i] : i번 노드에서 시작했을 때, 선공과 후공의 점수차 (둘 다 최선의 선택을 한 경우) 초기값 (리프 노드에서 시작하면 선공으로 점수를 얻고 바로 종료된다)D[..
[Programmers] 서울에 위치한 식당 목록 출력하기 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 핵심식당에 대한 리뷰 정보를 다루기 때문에 식당 테이블과 리뷰 테이블을 합친다.JOIN : 두 테이블을 붙인다. (두 테이블의 속성을 모두 합친 테이블이 된다.)USING : 해당 속성이 같은 행끼리 붙인다.SELECT REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESSFROM REST_INFO AS INFOLEFT JOIN REST_REVIEW AS RV USING (REST_ID) 가게 별로 리뷰의 평균을 구한다. 점수가 없다면 제외하고 리뷰 평균점수는 소수점 세 번째 자..
[Baekjoon Online Judge] 19951. 태상이의 훈련소 생활 (Java) 핵심N과 M이 최대 100,000이다.완전 탐색 시, 최악의 경우 시간복잡도가 O(NM)이므로 시간초과이다. 이와 같이 큰 범위를 다룰 때, 시간을 줄이기 위한 방법의 하나로 누적합이 있다.누적합이름에서 유추할 수 있듯이 값을 계속해서 쌓는 것이다.e.g. [1, 2, 3, 4, 5] 의 누적합을 원소로 하는 배열은 [1, 3, 6, 10, 15] 기존 배열의 인덱스 2~4 범위의 합을 구하려면, 가장 단순한 방법은 해당 범위를 순회하며 일일이 합하는 것이다. 누적합 배열 acc를 이용하면 acc[4] - acc[1]로 O(1)에 계산할 수 있다. 이 문제의 경우는 누적합 아이디어를 사용하면 해결할 수 있다. 우선 상태를 기록할 새로운 배열 acc를 만든다.조교 1이 2~4번 칸에 흙을 3만큼 쌓으라고 ..
[Baekjoon Online Judge] 1822. 차집합 (Java) 핵심두 배열의 길이가 500,000이다.따라서 배열 A의 각 원소가 배열 B의 원소에 포함되어 있는지 일일이 확인한다면 시간복잡도는 O(N^2)이 된다. (시간 초과) 따라서 시간복잡도를 줄여야 한다.원소가 많은 배열에서 특정한 원소가 포함되어 있는지 확인해야하는 문제이다.이분 탐색에 대해 알고 있다면 대부분 쉽게 떠올릴 수 있을 것이다. (모르겠다면 이분 탐색, 3분 안에 이해하기 참고) 그럼 시간복잡도는 O(NlogN)으로 줄고 여유있게 풀 수 있다.Code (Java)import java.io.IOException;import java.util.*;import static java.util.Collections.binarySearch;public class Main { public static..
[Programmers] 조건에 맞는 사용자와 총 거래금액 조회하기 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 과정거래 글 정보와 사용자 정보를 하나의 테이블로 합칩니다.JOINSELECT U.USER_ID, U.NICKNAMEFROM USED_GOODS_BOARD BJOIN USED_GOODS_USER UON B.WRITER_ID = U.USER_ID  거래가 완료된 글만 포함합니다.WHEREWHERE B.STATUS = 'DONE'  글 정보를 사용자 단위로 묶고가격을 합칩니다.GROUP BYSELECT U.USER_ID, U.NICKNAME, SUM(B.PRICE) AS TOTAL_SALESFROM USED_..

728x90
반응형