[SQL] 문제 풀이 모음집 - IS NULL
·
Algorithm/SQL
Level 1경기도에 위치한 식품창고 목록 출력하기🔗 문제 링크IFNULL(컬럼, 대체 값)해당 값이 NULL일 때, 다른 값으로 출력ISNULL(컬럼, 값1, 값2)컬럼 == NULL → 값1을 반환컬럼 ≠ NULL → 값2를 반환NULLIF(값1, 값2)값1 ≠ 값2 → 값1을 반환값1 == 값2 → NULL을 반환# 창고ID, 이름, 주소, 냉동시설 여부 조회# 냉동시설 여부가 NULL이면 'N'SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS FREEZER_YNFROM FOOD_WAREHOUSEWHERE ADDRESS LIKE '%경기도%'ORDER BY WAREHOUSE_ID; 이름이 없는 동물의 아이디🔗 문제 ..
[SQL] 문제 풀이 모음집 - SUM, MAX, MIN (ING)
·
Algorithm/SQL
Level 1가장 비싼 상품 구하기🔗 문제 링크최댓값 구하기: MAX(컬럼명)컬럼명 변경(앨리어싱): AS 컬럼명 or 컬럼명# 가장 높은 판매가 출력SELECT MAX(PRICE) MAX_PRICE # 컬럼명은 MAX_PRICE로 지정FROM PRODUCT; 최댓값 구하기🔗 문제 링크가장 최근 날짜 ⇒ MAX(), 가장 오래된 날짜 ⇒ MIN()# 가장 최근에 들어온 동물이 언제 들어왔는지 조회SELECT MAX(DATETIME) 시간 FROM ANIMAL_INS; 잡은 물고기 중 가장 큰 물고기의 길이 구하기🔗 문제 링크문자열 붙이기: CONCAT(문자열1, 문자열2, ...)# 가장 큰 물고기의 길이 출력(컬럼명: 은 'MAX_LENGTH)SELECT CONCAT(MAX(LENGTH), 'cm..
[SQL] 문제 풀이 모음집 - SELECT (ING)
·
Algorithm/SQL
보호되어 있는 글입니다.
[BOJ] 18111: 마인크래프트 (JAVA)
·
Algorithm/완전탐색
📄 문제https://www.acmicpc.net/problem/18111 📝 풀이땅을 고르게 만들기 위해서는 먼저 목표로 하는 땅의 높이를 정해야 한다.  이를 위해 땅의 최소 높이와 최대 높이를 구해야 한다. 그 후, 목표 높이를 "최소 높이 ~ 최대 높이" 사이 값으로 지정하여 최적의 높이를 찾아 시간을 계산하면 된다.  땅의 최대 높이는 256이므로, 최소 높이에서 최대 높이까지 모든 경우를 확인해도 된다. 또한, 최대 높이가 크지 않으므로 땅의 정보를 2차원 배열 대신 1차원 배열에 저장할 수 있다. (해당 높이의 땅이 몇 개인지 저장하는 1차원 배열) 목표 높이를 정했으면 깎아야 할 블록의 개수와 쌓아야 할 블록의 개수를 계산한다. 깎아야 하는 블록의 개수: 해당 높이의 땅 개수 * (현재..
[BOJ] 5525: IOIOI (JAVA)
·
Algorithm
📄 문제https://www.acmicpc.net/problem/5525 📝 풀이문자열 Pn은 I로 시작하고 OI가 총 n번 나오는 규칙이 있다. 이 규칙을 이용해서 Pn이 포함된 개수를 찾으면 된다.P₁ = IOI = I + OIP₂ = IOIOI = I + OI + OIP₃ = IOIOIOI = I + OI + OI + OI... 우선 문자열을 char로 변경하고 OI가 나온 개수를 기록하기 위한 배열을 만들어야 한다.  그 후, 두 개씩 확인하면서 첫 번째가 O, 두 번째가 I인지 확인한 뒤 지금 OI가 몇 번 나왔는지 기록하면 된다.check[i] = check[i - 1] + 1 문자열을 char 배열로 변경한 후, 2개씩 확인하면서 첫 번쨰는 O, 두 번쨰는 I인지 확인한 뒤, OI가 총 ..
[BOJ] 9370: 미확인 도착지 (JAVA)
·
Algorithm/최단경로
문제https://www.acmicpc.net/problem/9370  풀이이 문제는 출발지에서 도착지까지의 최단경로를 구했을 때, 그 최단경로에 g와 h 교차로 사이에 있는 도로를 지나가는지 확인하면 되는 문제이다.  따라서 다익스트라 알고리즘을 사용해서 풀이할 수 있다.  문제를 풀 때 고려해야 할 점은 최단경로가 여러 개일 때, 어떻게 g와 h 교차로 사이에 있는 도로를 지나가도록 할 수 있느냐이다. 이 부분에서 막혀서 풀이를 참고했는데 방법은 아주 간단했다.  방법 1g와 h 교차로 사이에 있는 도로를 지나가기 위해서는 그 도로에 우선순위를 줘야 한다. 따라서 모든 도로 길이에 2를 곱해서 저장한 뒤, g와 h 교차로 사이에 있는 도로 길이에 1을 빼서 우선순위를 주면 된다.  즉, 아래 그림과 ..
[BOJ] 1759: 암호 만들기 (JAVA)
·
Algorithm/완전탐색
문제https://www.acmicpc.net/problem/1759 풀이문제에서 주어지는 조건은 다음과 같다.주어지는 알파벳의 개수가 최대 15개 ⇒ 완전탐색?주어지는 L개의 알파벳 중에 C개의 알파벳을 중복없이 고르기 ⇒ 순열? 조합?암호를 이루는 알파벳을 증가하는 순서대로 배열하기 ⇒ 입력받은 알파벳을 정렬하기암호는 최소 1개의 모음, 최소 2개의 자음으로 구성하기 ⇒ 가능성이 있는 암호인지 확인하기 위해 모음의 개수와 자음의 개수 세기a b c는 암호가 될 수 있지만 b a c는 암호가 될 수 없다. 이는 순서가 있는 것처럼 보여, 순열로 풀어야 한다고 생각할 수 있다. 하지만 알파벳이 정렬된 상태에서 고르는 것이므로, 현재 알파벳의 앞부분을 확인하지 않는다. 따라서 조합을 사용하면 된다. 또한..
[BOJ] 16236: 아기 상어 (JAVA)
·
Algorithm/BFS & DFS
문제https://www.acmicpc.net/problem/16236 풀이이 문제는 조건이 많이 주어지기 때문에 조건을 잘 정리해야 한다.아기 상어는 자신보다 작은 크기의 물고기만 잡아먹을 수 있다.아기 상어는 자신보다 작거나 같은 크기의 물고기가 있는 칸으로만 이동할 수 있다.잡아먹을 물고기가 없다면 엄마 상어에게 도움을 요청한다.잡아먹을 물고기가 1마리라면 그 물고기를, 2마리 이상이라면 가장 가까운 거리에 있는 물고기를 잡아먹는다.거리가 같다면 가장 위에 있는 물고기를, 같은 높이라면 가장 왼쪽에 있는 물고기를 잡아먹는다. 가장 중요한 조건은 물고기를 잡아먹는 조건이다. 그냥 BFS 탐색을 수행해서 물고기까지의 최단 거리를 구하면 된다고 생각할 수 있지만, 물고기를 잡아먹는 조건이 3가지나 주어지..
[BOJ] 1005: ACM Craft (JAVA)
·
Algorithm/위상정렬
문제https://www.acmicpc.net/problem/1005 풀이건설 순서 규칙이 있는 방향 그래프(사이클X)이므로 위상 정렬을 사용해서 문제를 풀 수 있다.  위상정렬 문제를 푸는 것처럼 문제를 풀면 되지만, 목표한 건물을 짓는데 걸리는 시간을 구하기 위해서는 각 건물을 짓는데 소요되는 시간을 기록해야 한다. 문제에서 주어진 예시를 보면, 4번 건물을 짓기 위해서는 2번, 3번 건물이 지어져있어야 하므로 두 건물을 짓는 시간 중 최대 시간만큼 기다려야 한다. 따라서 4번 건물을 짓기 위해서는 10초 + Max(1초, 100초) + 10초 = 120초가 소요된다. 이러한 로직을 위상정렬을 수행할 때 추가해서 문제를 풀면 된다. 자세한 내용은 코드를 참고하면 된다. 코드import java.io...
[BOJ] 14889: 스타트와 링크 (JAVA)
·
Algorithm/완전탐색
문제https://www.acmicpc.net/problem/14889 풀이N명을 N / 2명씩 두 개의 팀으로 나눠야 한다. 즉, N명 중에서 N / 2명을 고르는 것(순서 상관X)이므로 조합을 사용하면 된다.  DFS 메서드(재귀)를 통해 N / 2명을 다 고른 후, 스타트 팀의 능력치와 링크 팀의 능력치를 구해야 한다. N / 2명을 고를 때 이미 방문 처리를 했으므로 방문 처리한 것은 스타트 팀, 하지 않은 것은 링크 팀으로 구분하면 된다.스타트 팀: used[i] = true링크 팀: used[i] = false 스타트 팀과 링크 팀의 능력치를 계산한 후, 두 팀의 능력치 차이를 최소값과 비교해 갱신하면 된다. 코드import java.io.BufferedReader;import java.io...