WHERE 절을 사용하여 MCDP_CD가 'CS'(흉부외과) 또는 'GS'(일반외과)인 의사들만 선택합니다.
이는 문제에서 요구한 "진료과가 흉부외과 또는 일반외과인 의사"를 조회하기 위한 것입니다.
필요한 컬럼 선택 및 날짜 형식 지정:
SELECT 절에서 의사의 이름(DR_NAME), ID(DR_ID), 진료과 코드(MCDP_CD), 고용일자(HIRE_YMD)를 선택합니다.
HIRE_YMD는 DATE_FORMAT 함수를 사용하여 'YYYY-MM-DD' 형식으로 변환합니다.
이는 출력되는 날짜가 예시와 동일한 포맷을 가지도록 하기 위함입니다.
결과 정렬:
ORDER BY 절을 사용하여 결과를 정렬합니다.
먼저 HIRE_YMD DESC로 고용일자를 기준으로 내림차순 정렬하여 최근에 고용된 의사가 먼저 나오도록 합니다.
고용일자가 같은 경우 DR_NAME ASC로 의사 이름을 기준으로 오름차순 정렬합니다.
#전체 코드
SELECT
DR_NAME,DR_ID,MCDP_CD,DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM
DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC,DR_NAME ASC;
#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>
#include <climits>
#include <set>
using namespace std;
vector<int> solution(vector<string> gems) {
unordered_map<string, int> gemCount;
set<string> gemTypes(gems.begin(), gems.end());
int totalTypes = gemTypes.size();
int minlength = INT_MAX;
pair<int, int> index;
// 투 포인터, 슬라이딩 윈도우를 활용
int l = 0, r = 0;
int currentTypes = 0;
while (true) {
if (currentTypes == totalTypes) { // 모든 종류의 보석이 포함되었을 때
if (minlength > r - l) {
minlength = r - l;
index = make_pair(l, r);
}
if (--gemCount[gems[l]] == 0) {
currentTypes--;
}
l++;
} else { // 모든 종류의 보석이 포함되지 않았을 때
if (r == gems.size()) break; // 종료 조건
if (gemCount[gems[r]]++ == 0) {
currentTypes++;
}
r++;
}
}
vector<int> answer = {index.first + 1, index.second};
return answer;
}
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool valueComp(const pair<string, int>& a, const pair<string, int>& b) {
return a.second > b.second; // 장르별 총 재생 수에 따라 내림차순 정렬
}
vector<int> solution(vector<string> genres, vector<int> plays) {
map<string, int> genreMap;
// 장르별 총 재생 수를 계산
for (int i = 0; i < genres.size(); i++) {
genreMap[genres[i]] += plays[i];
}
// 장르별 총 재생 수를 벡터로 이동
vector<pair<string, int>> vec(genreMap.begin(), genreMap.end());
// 벡터를 재생 수에 따라 정렬
sort(vec.begin(), vec.end(), valueComp);
vector<int> answer;
for (int i = 0; i < vec.size(); i++) {
pair<int, int> first = {-1, -1}; // 최대 재생수, 인덱스
pair<int, int> second = {-1, -1}; // 두번째로 많은 재생수, 인덱스
for (int j = 0; j < genres.size(); j++) {
if (genres[j] == vec[i].first) {
if (plays[j] > first.first) {
second = first; // 기존 첫번째 최대값을 두번째로 밀어냄
first = {plays[j], j}; // 새로운 최대값 설정
} else if (plays[j] > second.first) {
second = {plays[j], j}; // 두번째 최대값 갱신
}
}
}
if (first.second != -1) answer.push_back(first.second);
if (second.second != -1) answer.push_back(second.second);
}
return answer;
}