프로그래머스 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;
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;
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;
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;
}
}
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;
}
}
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;
}
}