Algorithm 9

[ 알고리즘 ] 완전탐색 - 최소 직사각형, 모의고사 문제

최소 직사각형 문제) 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다. 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다..

Algorithm 2024.04.16

[ 알고리즘 ] BFS 문제 - 단어 변환

문제) 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변..

Algorithm 2024.04.12

[ 알고리즘 ] DFS 문제 - 네트워크

문제) - DFS 사용 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 - 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. - 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. - i번 컴퓨터와 j번 컴퓨터가 연결되어 있..

Algorithm 2024.04.07

[ 알고리즘 ] DFS, BFS 란?

그래프를 탐색하는 방법은 총 두 가지가 있다. 그래프를 탐색한다는 개념은? 정점(node)와 간선(edge)로 이루어진 그래프에서 모든 정점들을 한 번씩 방문하는 것을 뜻한다. DFS (Depth-First Search) : 깊이 우선 탐색 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식 스택(Stack)이나 재귀함수를 이용해서 알고리즘을 풀 수 있다. 주로 재귀함수를 사용하여 짧게 코드를 작성할 수 있다. 모든 가능한 해를 탐색해야 할 때: DFS는 가능한 모든 경로를 깊게 탐색하면서 해를 찾는다. 따라서 모든 가능한 해를 찾거나, 해가 될 수 있는 모든 조합을 시도해봐야 하는 문제(예: 백트래킹 문제)에 적합하다. 최대 깊이가 제한적일 때..

Algorithm 2024.04.06

[ Python ] 정렬 (2) - list 예시

문제) 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 코드) def solution(array, commands): ..

Algorithm 2024.04.05

[ Python ] 정렬 (1) - list 개념

Python에서는 기본 데이터 타입인 숫자형 타입, 불리언 타입, 문자열 타입과는 별도로 이들로 구성되는 다양한 컨테이너 형태의 데이터 구조를 제공한다. 그 중에서도 가장 많이 사용되는 것이 바로 리스트(list) 타입이다. 이와 같은 데이터 타입을 다른 프로그래밍 언어에서는 배열(array)이라고도 부르지만, 파이썬에서는 리스트(list)라는 용어만을 사용한다. Python list 특징 1) 리스트에 저장되는 요소가 모두 같은 타입일 필요는 없다. 2) 리스트에는 요소들이 순서대로 저장되며, 각 요소는 0부터 시작하는 인덱스(index)를 사용하여 접근할 수 있다. 3) 리스트는 그 값을 변경할 수 있다. (mutable type) 리스트 선언하기 리스트는 대괄호 []로 감싸서 선언할 수 있으며, 리..

Algorithm 2024.04.04

[ SQL ] JOIN 과 UNION 사용 예시

UNION : 2개 이상 테이블에 존재하는 같은 성격의 값을 하나의 쿼리로 추출할 때 사용한다. 새로운 행으로 결합. UNION ALL : 중복 허용하고 모든 값을 추출하는 방법 UNION(=UNION DISTINCT) : 중복되지 않는 값만 추출하는 방법 문제) ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요. ..

Algorithm 2024.04.03

[ 알고리즘 ] 스택/큐 이론

선형구조 데이터를 저장하기 위한 기본적인 형태로 데이터가 일렬로 나열되어 있을 뿐만 아니라 데이터 간에 순서가 있고 논리적으로 이어져 있는 구조를 의미한다. 선형구조에는 큐(Queue), 스택(Stack), 덱(Deque) 이 있다. 큐는 선입선출, 스택은 후입선출, 덱은 양쪽 끝에서 삽입과 삭제가 가능한 형태의 구조를 가진다. 큐: 선형구조의 형태이며 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out)의 특성을 의미한다. 큐에서의 삽입과 추출 과정은 front와 rear포인터를 기준으로 작동한다. 데이터가 저장되는 곳은 rear부분이며 데이터가 추출하는 부분은 front에서만 수행한다. 스택: 데이터를 일시적으로 쌓아두기 위한 자료구조 중 하나로..

Algorithm 2024.04.02

[ SQL ] SQL 연산자 ( IN, EXISTS )

두 연산자 모두 서브쿼리의 결과를 사용하여 외부 쿼리의 조건을 충족시키는 데 사용된다. 하지만 차이점은? IN은 서브쿼리의 결과 집합에 값을 비교하여 일치하는 행을 선택하는 데 사용됩니다. 일반적으로 IN은 목록이나 결과가 적을 때 사용된다. EXISTS는 서브쿼리의 결과가 비어 있지 않은지 확인하는 데 사용됩니다. 따라서 주로 참/거짓 여부를 확인할 때 사용된다. IN 연산자는 무조건 서브쿼리의 모든 행을 검색한다. EXISTS 연산자는 서브쿼리에서 해당 값이 1건이라도 찾으면 검색을 멈추고 TRUE를 반환한다. 그래서 서브쿼리의 데이터가 작은 경우 IN 연산자와 EXISTS 연산자의 성능은 크게 차이가 없지만, 서브쿼리에서 조회되는 데이터가 많아질수록 EXISTS 연산자를 사용하는 것이 쿼리 문의 성..

Algorithm 2024.03.25