보통 0명 해결 정답률 0%

SQL 쿼리 빌더

주어진 조각들을 어떤 순서로든 조립하여 SQL 쿼리를 만드는 빌더입니다. 빌더 객체가 설정을 단계별로 모으는 방식입니다.

배우게 될 내용

  • 순서와 상관없이 조각을 모은 뒤 조립하기
  • 빠진 조각에 기본값 쓰기
  • 정해진 형식으로 결과 조립하기

문제

원문 보기 (영어)

builder 패턴은 복잡한 객체를 단계별로 구성하고 마지막에 최종 결과를 만들어 내므로, 호출자는 각 부분을 어떤 순서로든 설정할 수 있습니다.

각 부분은 키워드, 공백, 그리고 그 뒤의 텍스트로 이루어집니다:

  • select <columns>: 쉼표로 구분된 열 이름들입니다(쉼표 주변의 공백은 달라질 수 있습니다). 선택 사항이며, 기본값은 *입니다.
  • from <table>: 필수입니다.
  • where <condition>, order <columns>, limit <n>: 선택 사항입니다.

키워드가 한 번 이상 나타나면, 마지막 것이 적용됩니다. 쿼리는 다음 고정된 순서로, 단일 공백을 사용하여 만드세요:

SELECT <columns> FROM <table>[ WHERE <condition>][ ORDER BY <columns>][ LIMIT <n>]

SELECT 목록에서는 각 열을 trim하고 , 로 이어 붙이세요. 그 밖의 텍스트는 그대로 복사합니다.

query_builder(parts)를 구현하세요.

Input

parts: 순서와 관계없이 주어지는 조각들입니다.

Output

SQL 쿼리 문자열을 반환하세요.

제약 조건

1 ≤ 부분 수 ≤ 20

from 부분이 적어도 하나 있음; 각 부분은 최대 100자

예시

예시 1
입력:
parts = ["where age \u003e 18", "from users", "select name,age"]

예상 출력:
expected = "SELECT name, age FROM users WHERE age \u003e 18"
입력:
std::vector<std::string> parts = {"where age \u003e 18", "from users", "select name,age"};

예상 출력:
std::string expected = "SELECT name, age FROM users WHERE age \u003e 18";
입력:
string[] parts = new string[] {"where age \u003e 18", "from users", "select name,age"};

예상 출력:
string expected = "SELECT name, age FROM users WHERE age \u003e 18";

설명

조각들은 순서가 뒤섞여 들어오지만, 쿼리는 항상 SELECT … FROM … WHERE … 형태로 만들어집니다: "SELECT name, age FROM users WHERE age > 18".

예시 2
입력:
parts = ["from orders", "limit 10", "order total DESC"]

예상 출력:
expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10"
입력:
std::vector<std::string> parts = {"from orders", "limit 10", "order total DESC"};

예상 출력:
std::string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";
입력:
string[] parts = new string[] {"from orders", "limit 10", "order total DESC"};

예상 출력:
string expected = "SELECT * FROM orders ORDER BY total DESC LIMIT 10";

설명

select 부분이 없으면 열은 기본값으로 *가 됩니다: "SELECT * FROM orders ORDER BY total DESC LIMIT 10".

접근 방법

먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.

힌트 1

먼저 조각을 키워드별로 저장하고 문자열은 마지막에 만드세요.

힌트 2

같은 키워드의 조각이 나중에 오면 앞의 것을 대체합니다.

힌트 3

SELECT 목록의 각 열은 공백을 없애고, select 조각이 없으면 *를 쓰세요.

예상 복잡도

시간 O(전체 길이), 추가 공간 O(전체 길이)

참고 자료

이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.