알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

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

 

프로그래머스

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

programmers.co.kr


Think🤔

 

stream 사용법에 대해서 공부해야 될 필요가 있다.


Solution✍

 

class Solution {
    public int[] solution(String[] strlist) {
        int[] answer = new int[strlist.length];
        for(int i=0; i<strlist.length; i++){
            answer[i] = strlist[i].length();
        }
        return answer;
    }
}

 

Review🤩

 

import java.util.Arrays;

class Solution {
    public int[] solution(String[] strList) {
        return Arrays.stream(strList).mapToInt(String::length).toArray();
    }
}

 

mapToInt는 int로 형변환 

Arrays.stream을 사용하여 문자열 배열을 스트림으로 변환

mapToInt를 사용하여 각 문자열을 그 길이로 매핑 , toArray를 호출하여 정수 배열로 변환


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

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

 

프로그래머스

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

programmers.co.kr


Think🤔

 

index_list에 있는 값에 있는 단어를 차례대로 붙여주면 된다.


Solution✍

 

class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        for(int i=0; i<index_list.length; i++){
            answer += my_string.charAt(index_list[i]);
        }
        return answer;
    }
}

Review🤩

 

해당 코드 스트림 코드를 봤는데 이해하지 못하여 첨부하지 못했다..


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

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

 

프로그래머스

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

programmers.co.kr


Think🤔

 

원소의 평균값을 return하는 문제


Solution✍

 

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        for(int i=0; i<numbers.length; i++){
            answer += numbers[i];
        }
        
        return answer / numbers.length;
        
    }
}

 

Review🤩

 

스트림으로 풀려고 했는데 스트림 문법을 잘 몰라서 찾아봤는데

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        return Arrays.stream(numbers).average().orElse(0);
    }
}

이런식으로 풀 수 있다는 것을 알았다.

orElse는 해당값이 ㅇnull이 아닌 경우 그 값을 주고 그 외인 경우 0을 돌려준다.


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

프로그래머스 자바 Lv. 0 정답률 높은 문제

정답률 90%대 문제를 풀면서 복습한 후 다음 레벨로 넘어갈 예정입니다.


Think🤔

 

솔루션에 같이 기입하겠습니다.


Solution✍

 

조건에 맞게 수열 변환하기 3

class Solution {
    public int[] solution(int[] arr, int k) {
        int[] answer = new int[arr.length];
        
        if(k % 2 == 0){
            for(int i=0; i<answer.length; i++){
                answer[i] = arr[i] + k;
            }
        }else{
            for(int i=0; i<answer.length; i++){
                answer[i] = arr[i] * k;
            }
        }
        
        return answer;
    }
}

 

다른 사람 코드를 확인해보니 stream을 이용해서 한줄로 쓴 코드가 있다.

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int k) {
        return Arrays.stream(arr).map(operand -> k % 2 == 0 ? operand + k : operand * k).toArray();
    }
}

해석해보면 Arrays이용해서 배열 arr을 가지고 삼항을 이용해서 

map람다를 이용하고 k % 2 == 0을 검사해서 짝수이면 + k를 반환하고 아니면 홀수 * k를 반환하고 return 시켜준다...


Review🤩

 

다음에는 람다로도 풀어봐야겠다..


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

프로그래머스 85% ~ 82% 안 푼 문제 입니다.


Think🤔

 

정답률이 높은 문제이므로 Solution부분에 바로 기입하겠습니다.


Solution✍

 

조건에 맞는 도서와 저자 리스트 출력하기

SELECT A.BOOK_ID , B.AUTHOR_NAME , TO_CHAR(A.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK A JOIN AUTHOR B
  ON A.AUTHOR_ID = B.AUTHOR_ID
WHERE A.CATEGORY = '경제'
ORDER BY A.PUBLISHED_DATE;

 

조건별로 분류하여 주문상태 출력하기

SELECT ORDER_ID , PRODUCT_ID , TO_CHAR(OUT_DATE,'YYYY-MM-DD') 
                , CASE
                    WHEN TO_CHAR(OUT_DATE, 'YYYYMMDD') > '20220501' THEN '출고대기'
                    WHEN TO_CHAR(OUT_DATE, 'YYYYMMDD') <= '20220501' THEN '출고완료'
                    ELSE '출고미정'
                END AS "출고여부"
FROM FOOD_ORDER
ORDER BY ORDER_ID;

 

보호소에서 중성화한 동물

SELECT A.ANIMAL_ID , A.ANIMAL_TYPE , A.NAME
  FROM ANIMAL_INS A JOIN ANIMAL_OUTS B
    ON A.ANIMAL_ID = B.ANIMAL_ID
 WHERE A.SEX_UPON_INTAKE LIKE '%Intact%'
   AND (B.SEX_UPON_OUTCOME LIKE '%Spayed%'
    OR B.SEX_UPON_OUTCOME LIKE '%Neutered%');

 

 

성분으로 구분한 아이스크림 총 주문량

SELECT INGREDIENT_TYPE , SUM(TOTAL_ORDER)
  FROM FIRST_HALF A JOIN ICECREAM_INFO B
    ON A.FLAVOR = B.FLAVOR
  GROUP BY INGREDIENT_TYPE;

 

조건에 맞는 도서 리스트 출력하기

SELECT BOOK_ID , TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
  FROM BOOK
 WHERE TO_CHAR(PUBLISHED_DATE,'YYYY') = '2021'
   AND CATEGORY = '인문'
 ORDER BY PUBLISHED_DATE;

 

조건에 맞는 사용자와 총 거래금액 조회하기

 SELECT USER_ID , NICKNAME , SUM(PRICE) AS TOTAL_SALES
   FROM USED_GOODS_BOARD A JOIN USED_GOODS_USER B
     ON A.WRITER_ID = B.USER_ID
  WHERE A.STATUS = 'DONE'
GROUP BY USER_ID , NICKNAME
 HAVING SUM(PRICE) >= 700000
 ORDER BY TOTAL_SALES;

 

평균 일일 대여 요금 구하기

SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
  FROM CAR_RENTAL_COMPANY_CAR 
 WHERE CAR_TYPE = 'SUV';
 --GROUP BY CAR_TYPE; -- SUV만이여서 GROUP BY 필요 없음

 

Review🤩

 

GROUP BY를 안써도되는 이유는 하나만 사용하기 때문!

나머지는 문제를 읽은대로 풀었다.

ROUND 함수 뒤에 인자 0으로 넣으면 소수점 1자리에서 반올림 하는 것 기억

CASW WHEN ELSE END 기억!


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

프로그래머스에 상위 90% ~ 80%대 문제 입니다.


Think🤔

 

복습겸 작은 성취감을 위해 풀어봅니다..


Solution✍

 

가격이 제일 비싼 식품의 정보 출력하기

SELECT * 
from FOOD_PRODUCT
where PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);

- 다른 방법으로는 ORDER BY DESC 한 다음 LIMIT 1을 구하는 방법이 있습니다.

SELECT *
FROM FOOD_PRODUCT 
ORDER BY PRICE DESC
FETCH FIRST 1 ROWS ONLY;

-정렬한 후에 첫번째 반환

 

조건에 맞는 회원수 구하기

SELECT COUNT(1) FROM USER_INFO WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%' AND AGE >= 20 AND AGE <= 29;
SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE EXTRACT(YEAR FROM JOINED)=2021 AND AGE >= 20 AND AGE <=29

-BETWEEN 으로 사용해도 가능

-TO_CHAR를 이용해서 년도 LIKE로 검색 앞에만 2021년인 것

-연도 추출해서 반환 가능 

 

 

카테고리 별 상품 개수 구하기

SELECT SUBSTR(PRODUCT_CODE,1,2) AS CATEGORY, COUNT(1) 
FROM PRODUCT 
GROUP BY SUBSTR(PRODUCT_CODE,1,2) 
ORDER BY CATEGORY ASC;

- LEFT는 안된다.

 

중성화 여부 파악하기

SELECT ANIMAL_ID
     , NAME
     , CASE 
        WHEN LOWER(SEX_UPON_INTAKE) LIKE '%neutered%' THEN 'O'
        WHEN LOWER(SEX_UPON_INTAKE) LIKE '%spayed%' THEN 'O'
    ELSE 'X'
    END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID , NAME , 중성화;

- LOWER은 안넣어도 상관없음

 

진료과별 총 예약 횟수 출력하기

SELECT MCDP_CD AS "진료과코드" 
      , COUNT(1) AS "5월예약건수"
 FROM APPOINTMENT 
WHERE TO_CHAR(APNT_YMD,'YYYYMM') = 202205
GROUP BY MCDP_CD
ORDER BY "5월예약건수" ASC , "진료과코드" ASC;
SELECT MCDP_CD AS "진료과코드" 
      , COUNT(1) AS "5월예약건수"
 FROM APPOINTMENT 
WHERE TO_CHAR(APNT_YMD,'YYYYMM') = 202205
GROUP BY MCDP_CD
ORDER BY 2 , 1;

 

인기있는 아이스크림

SELECT FLAVOR FROM FIRST_HALF ORDER BY TOTAL_ORDER DESC , SHIPMENT_ID

 

12세 이하인 여자 환자 목록 출력하기

SELECT PT_NAME , PT_NO ,GEND_CD,AGE,NVL(TLNO,'NONE') AS TLNO 
FROM PATIENT
WHERE AGE <= 12 
AND GEND_CD = 'W' 
ORDER BY AGE DESC , PT_NAME;

자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

SELECT CAR_TYPE , COUNT(1) AS CARS 
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
SELECT CAR_TYPE, COUNT(1) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE REGEXP_LIKE(OPTIONS, '시트', 'i') -- 'c'도 가능 
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;

- 대소문자를 구분해라 c , 상관없다 i 임

 

카테고리 별 도서 판매량 집계하기

SELECT CATEGORY , SUM(SALES) AS TOTAL_SALES
FROM BOOK A JOIN BOOK_SALES B
  ON A.BOOK_ID = B.BOOK_ID
WHERE TO_CHAR(SALES_DATE,'YYYYMM') = 202201
GROUP BY CATEGORY
ORDER BY CATEGORY;

 

상품 별 오프라인 매출 구하기

SELECT A.PRODUCT_CODE , SUM(A.PRICE * B.SALES_AMOUNT) AS SALES 
FROM PRODUCT A INNER JOIN OFFLINE_SALE B
  ON A.PRODUCT_ID = B.PRODUCT_ID
GROUP BY A.PRODUCT_CODE
ORDER BY SALES DESC , A.PRODUCT_CODE ASC;

 - 집계함수를 이용하여 합계 출력


Review🤩

 

오라클에서 정규식을 사용하는 법 , FETCH에 대해서 복습


 

+ Recent posts