[33] 부트캠프 TIL - 본캠프 15일차

2024. 9. 13. 17:49부트캠프 TIL

728x90

1. 프로그래머스 이용한 sql과 알고리즘 문제 해결

1-1)  sql 문제 : 카테고리 별 상품 개수 구하기

ㄴ 문제 : 상품 테이블에서 상품카테고리 (코드의 앞자리 2개) 별 상품개수를 출력하는 SQL문을 출력해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.

ㄴ 설명_1 : 조회할 컬럼 체크 - 오늘은 기존 쿼리 그대로 활용이 아닌 2개다 지정컬럼명을 해줘야한다.

ㄴ 설명_2 : 지정컬럼명 - CATEGORY (카테고리 앞2자리 추출), PRODUCTS(각 카테고리별 상품의 개수)

ㄴ 설명_3 : 카테고리 코드를 기준으로 오름차순 정렬 (order by ASC)

ㄴ 설명_4 : 카테고리코드 2자리추출과 카테고리별 상품개수 추출이 메인이다.

- 2자리추출( SUBSTR(컬럼명, 시작위치, 글자수), 개수추출(COUNT함수 및 전체쿼리에 GROUP BY)

- 위 2가지를 사용해야하며, GROUP BY를 해주는 이유는 카테고리별로 개수를 구해야하기 때문에 GROUP BY로 카테고리를 그룹화 해줘야한다.

 

ㄴ 실제 쿼리 :

SELECT CATEGORY,
   PRODUCTS
FROM    
(
select SUBSTR(PRODUCT_CODE, 1, 2) AS 'CATEGORY', COUNT(*) AS 'PRODUCTS'
from PRODUCT
group by CATEGORY
) a;

SUBSTR로 추출해낸 카테고리를 그룹화 하기 위해선 서브쿼리 사용이 필요하다. 

먼저 메인테이블에서 추출해내야할 조건을 다 적고나서 괄호로 쿼리를 씌운다.

ㄴ 최상단에서 추출해야할 지정컬럼명을 그대로 입력해준다. (이때 지정컬럼명은 ORDER BY나 GROUP BY에 활용할 수 있게 설정된다.)

ㄴ GROUP BY로 CATEGORY를 그룹화시키고, a식별자를 넣어서 마무리한다.

 

※ 이번 SQL문제는 예전 SQL 4주차 강의 중 실습문제와 유사한 형태였다.

※ 개발 중에 데이터베이스 내장함수나 개발언어 메서드 등 사용법을 다 외우고 있진 못하더라도 이 상황에서 그거쓰면됐는데,,? 정도만 기억하고 있다면 바로 검색해서 활용할 수 있는데 이번에 바로 생각해냈고, 복습하듯이 문제를 풀어서 좋았다.

 

1-2) 알고리즘 문제 : 콜라츠 추측

ㄴ 아래 설명처럼 짝수면 2로 나누고, 홀수면 3을곱하고 1을 더한다.

ㄴ 1이 될때까지 반복을한다.

ㄴ num을 long타입으로 변경한다 - int제한 크기를 넘어서기때문에 미리 변환

ㄴ 1이 나올때까지 반복을 해야한다 - while문 조건에 1이 아닐경우로 걸고 1이면 반복문 종료되도록

ㄴ 짝수구하는 식으로 삼항연산자 활용하여 짝수와 홀수일때 각각 계산방법 진행.

ㄴ answer는 증감시켜서 while문 진행되는 수만큼 체크

ㄴ 횟수가 500번되면 -1리턴하고 break로 반복문 탈출

ㄴ 짝수 구하는 식만 알고 있다면 문제에 해당되는 조건들이 다 들어있어서 풀 수 있는 문제였다.

 

※ 문제를 제대로 읽지 않은 이슈가 있었다. 실행한 횟수를 구하는건데 실행한 결과값을 answer에 넣어서 return하는 것으로 계속 착각했다. 500번 되면 -1 return은 체크해서 cnt변수를 따로만들어서 횟수를 구하고, answer = n; 이렇게 계속 실행해서 오류가 났었다.
cnt변수도 필요없었고,  answer로 횟수를 실행횟수와 500번 -1까지 한방에  return하면 끝나는 문제였다.

 

728x90