매일 Algorithm 소마 준비 (SQL)

신재원·2023년 2월 22일
0

Algorithm

목록 보기
45/243

프로그래머스 SQL (SELECT) (소마 1차 준비)

# INTAKE_CONDITION이 Aged가 아닌 경우를 뜻함
## 자바 문법 처럼 WHERE (조건절) 에 "!=" 로 조건을 만들어준다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;

프로그래머스 SQL (SELECT) (소마 1차 준비)

# LIMIT 를 이용해 상위 N개 행만 조회
# LIMIT 0, 1 : 위에서 0부터 1까지의 정보 추출
# LIMIT 1 : 위에서 1개의 정보 추출
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

프로그래머스 SQL (SELECT) (소마 1차 준비)

# YEAR (테이블) 하게되면 년도가 반환된다.
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE >= 20 AND AGE <= 29 AND YEAR(JOINED) = 2021;

프로그래머스 (LEVEL 1) 완전탐색

import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
       
        // 찍는 방식이 정해져있다.
        int [] a = {1,2,3,4,5}; 
        int [] b = {2,1,2,3,2,4,2,5}; 
        int [] c = {3,3,1,1,2,2,4,4,5,5}; 
        int [] count = {0,0,0};
        // 1 2 3 4 5 5 4 3 2 1
        for(int i = 0 ; i < answers.length; i++){
            // answer의 length가 최대 10_000임으로
            // 수포자의 찍은 번호와 맞게 해줘야된다.
            if(answers[i] == a[i % 5]){
                count[0]++;
            }
             if(answers[i] == b[i % 8]){
                count[1]++;
            }
             if(answers[i] == c[i % 10]){
                count[2]++;
            }
        }
        // 수포자 3명 다 2문제로 동일하게 맞췄을경우
        int max = Math.max(count[0], Math.max(count[1], count[2]));
        List <Integer> list = new ArrayList<>();
        if(max == count[0]){
            list.add(1);
        }
        if(max == count[1]){
            list.add(2);
        }
        if(max == count[2]){
            list.add(3);
        }
         int[] result = new int[list.size()];
        
        for(int i = 0; i < list.size(); i++){
            result[i] = list.get(i);
        }
        
        
        
        return result;
    }
}

프로그래머스 SQL (SUM, MAX, MIN) (소마 1차 준비)

# COUNT (*) 이면 테이블 전체를 count
## COUNT (DISTINCT 테이블명) 해당 테이블명의 중복을 제거하고 count
SELECT COUNT(distinct NAME)
FROM ANIMAL_INS

프로그래머스 SQL (GROUP BY) (소마 1차 준비)

# COUNT를 하여 전체 테이블을 다 세어주고
# 진료과 코드 별로 조회해야 함으로, GROUP BY의 진료과코드
## 환자 수를 기준으로 오름차순임으로, COUNT(*)
SELECT MCDP_CD AS 진료과코드,
COUNT(*) AS 5월예약건수
FROM APPOINTMENT
WHERE MONTH(APNT_YMD) = 5
GROUP BY MCDP_CD
ORDER BY COUNT(*) ASC, MCDP_CD;

프로그래머스 (LEVEL 1) 그리디

import java.util.*;
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        /**
        lost를 기준으로 reserve의 앞뒤 번호를 검사한다.
        남아있는 lost의 길이에서 전체 학생(n) 을 빼준다.
        **/
        Set<Integer> resSet = new HashSet<>();
        Set<Integer> lostSet = new HashSet<>();
        
        // 도난당한 학생과, 여벌의 체육복을 가져온 학생을 담는다.
        
        for(int i : reserve){
            resSet.add(i);
        }
        for(int j : lost){
            // 여분의 체육복을 가져왔더라도, 
            // 도난 당했을 경우도 있음으로, 중복을 확인한다.
            if(resSet.contains(j)){
                resSet.remove(j);
            }
            else{
                lostSet.add(j);
            }
        }
        
           for (int i : resSet) {
            // 여분의 체육복을 가져온 학생들로부터 lost한 학생을 앞뒤로 확인한다.
            // List의 remove는 인덱스 기준, Set의 remove는 값 기준이다.
            if (lostSet.contains(i - 1)) {
                lostSet.remove(i - 1);
            } else if (lostSet.contains(i + 1)) {
                lostSet.remove(i + 1);
            }
        }
        
        // 전체 학생수에서 lostSet.size() = 남아있는 번호 를 빼준다.
        return n - lostSet.size();
    }
}

프로그래머스 SQL (GROUP BY) (소마 1차 준비)

-- 코드를 입력하세요
SELECT CATEGORY, PRICE AS MAX_PRICE,PRODUCT_NAME
FROM FOOD_PRODUCT
# 식품분류별로 가격이 제일 비싼 식품의 분류니깐 가격을 서브쿼리
## 다음으로 식품분류가 '과자', '국', '김치', '식용유'인 
## 경우 임으로, IN절로 조건을 걸어주었다.
WHERE PRICE IN(SELECT MAX(PRICE) FROM FOOD_PRODUCT GROUP BY CATEGORY)
               AND CATEGORY IN ('과자', '국', '김치', '식용유' )
ORDER BY MAX_PRICE DESC;

프로그래머스 (LEVEL 2) 힙

import java.util.*;
class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        // PriorityQueue 사용 기억
        Queue<Integer> q = new PriorityQueue<>();
    
        for(int i : scoville){
            q.add(i);
        }
        // stack과 유사하게 맨위의 값을 꺼내온다.
        while(q.peek() < K){
            if(q.size() == 1){
                return -1;
            }
            // queue의 맨 위의 값을 반환후 삭제
            q.add(q.poll() + (q.poll() * 2));
            answer++;
        }
        return answer;
    }
}

프로그래머스 (2021 카카오 채용연계형 인턴십)

class Solution {
    public int solution(String s) {
        String [] arr = {"zero", "one", "two", "three", "four", 
        "five", "six", "seven","eight", "nine"};
        
        // 숫자의 범위가 0 ~ 9 까지 임으로
        // "one4seveneight" = "1478"(아직 문자열) --> int로 변환해줘야됨
        for(int i = 0 ; i < 10; i++){
            s = s.replace(arr[i], Integer.toString(i));
            
        }
        int answer = Integer.parseInt(s);
        return answer;
    }
}

프로그래머스 2017 팁스타운

import java.util.Stack;

class Solution {
    public int solution(String s) {
        int answer = 1;
        Stack<Character> st = new Stack<>();
        
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            // 초기 Stack은 Stack이 비어 있음으로, 값을 하나 채워준다.
            if (st.isEmpty()) {
                st.add(ch);
            } else {
                // Stack에 채운 맨 위의 값이 같을 경우 pop
                if (st.peek() == ch) {
                    st.pop();
                } else {
                    st.push(ch);
                }
            }
        }
        if (st.size() == 0) {
            return answer;
        }
        return 0;
    }
}

0개의 댓글