#문제 간단 정리

 

#문제 해결 방법

 

  • 진료과 필터링:
    • 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;

 

ROUND 함수는 SQL에서 숫자 값을 지정된 소수 자리까지 반올림하는 데 사용됩니다. 일반적인 구문은 다음과 같습니다:

ROUND(number, decimal_places)
  • number: 반올림할 숫자 값입니다.
  • decimal_places: 반올림할 소수 자릿수입니다.

예시를 통해 설명하겠습니다:

  • ROUND(123.456, 2)는 123.46이 됩니다. 소수 둘째 자리까지 반올림하므로 셋째 자리인 6이 반올림 기준이 됩니다.
  • ROUND(123.456, 0)는 123이 됩니다. 소수 첫째 자리에서 반올림하여 정수 부분만 남습니다.
  • ROUND(123.456, -1)은 120이 됩니다. 소수점 왼쪽 첫째 자리에서 반올림합니다.

 

 

#전체 코드

SELECT 
    ROUND(AVG(DAILY_FEE), 0) 
FROM 
    CAR_RENTAL_COMPANY_CAR
WHERE 
    CAR_TYPE = 'SUV';

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#해설

본문을 그대로 따라서 구현하면 되는 문제

1. 여기서 선물주는 기록이 문자열로 주어지기 때문에 sstream을 통해 문자열 분리 입력받고 

2. 2차원 배열을 각 이름에 맞게 만들어 주기 위해서 각 이름과 인덱스를 map을 이용해 맵핑해주기

3.주고받은 선물 수 비교 후 같으면 선물지수로 비교후 최대값 갱신

4. 끝

 

 

 

#코드

#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <sstream>

using namespace std;

int solution(vector<string> friends, vector<string> gifts) {
    
    int fSize = friends.size();
    vector<vector<int>> giftCount (fSize, vector<int> (fSize, 0)); //주고받은 선물
    vector<int> giftFactor (fSize,0); //선물 지수
    vector<int> giftRank (fSize,0); // 다음달 받을 선물 개수
    
    //친구들의 인덱스와 이름 매칭
    map<string,int> friendsMap;
    for(int i=0; i<fSize; i++){
        friendsMap.insert({friends[i],i});
    }
    
    for(string s : gifts){
        string first,second;
        stringstream ss (s);
        
        ss >> first >> second;
        
        
        giftCount[friendsMap[first]][friendsMap[second]]++;
        giftFactor[friendsMap[first]]++;
        giftFactor[friendsMap[second]]--;
        
        //cout << first << " " << second << endl;
        //cout << friendsMap[first] << " " << friendsMap[second] << endl;
        
    }
    
    //테스트 출력 코드
    for(int i=0; i < fSize; i++){
        for(int j=0; j<fSize; j++){
            cout << giftCount[i][j] << " ";
        }
        cout << endl;
    }
    
    for(int a : giftFactor){
        cout << a << endl;
    }
    
    
    //선물 개수 갱신
    int max = 0;
    for(int i=0; i<fSize; i++){
        for(int j=0; j<fSize; j++){
            if(i != j){
                if(giftCount[i][j] > giftCount[j][i]){
                    giftRank[i]++;
                    if(giftRank[i]> max){
                        max = giftRank[i];
                    }
                }
                else if(giftCount[i][j] == giftCount[j][i]){
                    if(giftFactor[i] > giftFactor[j]){
                        giftRank[i]++;
                        if(giftRank[i]>max){
                            max = giftRank[i];
                        }
                    }
                }
            }
        }
    }
    
    return max;
    
    
}

+ Recent posts