TIL

2024-04-02

여연찌 2024. 4. 2. 19:15
  • 오늘 진행한 일

1. SQL 코드카타 (51~55번)

2. 알고리즘 코드카타 복습

3. 알고리즘 코드카타 (23번)

 


  • 기억할 내용

 

SQL

 

재구매가 일어난 상품과 회원 리스트 구하기

https://lyj-01.tistory.com/65

 

재구매가 일어난 상품과 회원 리스트 구하기 # GROUP BY

https://school.programmers.co.kr/learn/courses/30/lessons/131536 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

lyj-01.tistory.com

 

우선 재구매가 일어난 회원 리스트를 뽑았다..

SELECT *
FROM online_sale

 

user_id 15번 같은 사람을 뽑아야하는데

같은 사람이 같은 상품을 구매했을 때 = 두가지 정보를 일치했을 때 인데

두가지 다 만족하는 값을 어떻게 구하기 위해

with 절, 서브쿼리, 셀프조인 등등 사용을 해보았지만 원하는 값이 나오지 않았다..

그러다가 알게된

group by 2개 이상 중복 활용 방법!

 

SELECT user_id, product_id ,count(*)
FROM online_sale
group by 1,2
order by 1

group by 에 두가지 컬럼을 넣을 경우

user_id 가 12, product_id 가 7 인 그룹

user_id 가 13, product_id 가 27 인 그룹

등 으로 나온다

 

이 문제에서는 2건 이상을 원하므로

having 구절을 사용하여 뽑아냈다!

SELECT user_id, product_id
FROM online_sale
GROUP BY 1,2
HAVING COUNT(*)>1
ORDER BY 1,2 DESC

 

GROUP BY 절에 대해서 제대로 이해한 듯 해서 속시원하다

 

 

최댓값을 구하는 코드카타를 하다가 문득 궁금증이 생겼다.

 

Q. where 절에서는 max 같은 집계함수는 쓸 수 없을까? 어떤 조건만 쓸 수 있을까?

A.

① 연산자

: 비교연산자(=,>,< 등), 수식연산자(+,-,*,/), 결합 연산자(||)

② AND, OR 조건

③ 범위 조건( BETWEEN ~ AND)

④ NULL 조건

⑤ IN 조건

⑥ EXISTS 조건(서브쿼리만을 사용하여 확일 할 수 있다)

⑦ LIKE 조건

>>

집계함수는 사용할 수 없지만, 생각보다 꽤나 많은 조건을 조회할 수 있었다.

6번 exists 조건은 이후 사용할 때 더 꼼꼼히 공부해봐야겠다!

 

* 집계함수

: 여러행으로부터 하나의 결괏값을 반환하는 함수

: SELECT 구문에서만 사용가능 하다.

: avg, sum, max, min, count 등

: having 절에서 사용할 수 있으며, 그룹화에 한해서만 가능

 

 

조건에 맞는 사용자 정보 조회하기

https://lyj-01.tistory.com/66

 

조건에 맞는 사용자 정보 조회하기 # CONCAT(),SUBSTR()

https://school.programmers.co.kr/learn/courses/30/lessons/164670#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘

lyj-01.tistory.com

그룹화를 하여 사용자를 뽑아내는 것까지는 무리없이 진행했으나

문자열을 합치는 방법이 기억이 나지 않아 구글링을 통해 알아냈다. 

 

CONCAT()

     , CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) "전체주소"
     , CONCAT(SUBSTR(tlno,1,3), '-', SUBSTR(tlno,4,4), '-', SUBSTR(tlno,8)) "전화번호"

 

전화번호 속에 '-'하이픈을 넣는 출력방식은 자주 사용할 것 같으니 꼭 기억해둬야겠다

2가지 방법이 있다.

 

① substr 을 사용하여 원하는 갯수만큼 잘라내기

② left, mid, right 를 사용하여 왼쪽에서, 중간에서, 가운데에서 원하는 만큼 잘라내기

* 문자열을 자른 후 '-' 하이픈 추가해주기

 

 

 

 

 


 

파이썬

 

x만큼 간격이 있는 n개의 숫자

https://lyj-01.tistory.com/36

 

x만큼 간격이 있는 n개의 숫자 # range()

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. de

lyj-01.tistory.com

 for i in range(x,n+1):

x 만큼 간격이 있다고 해서

range 를 x 부터 n까지의 숫자를 넣었더니 원하던 값이 나오지 않았다.

 

이 문제에서 원하는 값은 

x씩 증가하는 n개의 숫자이기 때문에

for i in range(1,n+1)

 

자연수 n만큼의 범위를 구해야한다!

원하는 값을 찾을 수 있도록 천천히 고민해봐야겠다.

 

 

정수 내림차순으로 배치하기

https://lyj-01.tistory.com/40

 

정수 내림차순으로 배치하기 # sort, ''.join()

def solution(n): result = list(str(n)) result.sort(reverse = True) return int(''.join(result)) ① result = list(str(n)) # n을 문자열로 바꾸어 리스트를 만들어준다 >> ['1','1','8','3','7','2'] ② result.sort(reverse = True) # 리스트를

lyj-01.tistory.com

def solution(n):
    answer = list(map(int,str(n)))
    answer.sort(reverse=True)
    return answer

answer 값을 줄 때부터 int 형식으로 바꿔서 했더니

정수형 리스트가 나왔고 저렇게 숫자로 구성된 리스트는 join 함수를 사용 할 수 없어 오류가 발생했다.

 

join 함수는 문자열리스트만 문자열로 합하여 줄 수 있다!

굳이 2행을 수정하고 싶지 않다면

def solution(n):
    answer = list(map(int,str(n)))
    answer.sort(reverse=True)
    return int("".join(map(str,answer)))

이렇게 map 함수로 변환해주는 방법도 있겠으나 

계산 속도만 더 느려질 뿐이니 

def solution(n):
    answer = list(str(n))
    answer.sort(reverse=True)
    return int("".join(answer))

이렇게 2행의 answer 값을 변환하는 것이 나을 듯 하다!

 

어제 한 실수를 또 했음,,

이번에는 더 기억에 확 박힐 듯 하다

 

 

하샤드 수

https://lyj-01.tistory.com/47

 

하샤드 수

https://school.programmers.co.kr/learn/courses/30/lessons/12947 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는

lyj-01.tistory.com

def solution(x):
    x_list=list(map(int,str(x)))
    Sum=sum(x_list)
    if x%sum==0:
        return True
    else:
        return False

gg..

이번에는 다 완성했지만 if 조건문에서 매개변수 Sum 이 아닌 sum 으로 입력했다가 오류가 떴다.

매개변수는 다른 이름으로 하는게 좋을 듯!

꼭 주의 하자

 

 

 

콜라츠 추측

https://lyj-01.tistory.com/64

 

콜라츠 추측 # while 반복문

https://school.programmers.co.kr/learn/courses/30/lessons/12943 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는

lyj-01.tistory.com

특정 조건(1이 나왔을때) 에서 반복을 멈춰줘야 하는 것 > while 반복문

이란 것까지는 추측을 했지만 정작 사용법을 잘 몰라 결국 구글링으로 알아냈다.

 

while 반복문

: 특정 조건을 만족하는 경우에만 반복하는 문장

초기문
while 조건문:
     수행할 코드
     변화문

초기문 > answer = 0

조건문 > num != 0:
수행할 코드  > if num %2 == 0:
                              num /= 2
                        else:
                              num = num*3+1

변화문 > answer += 1

 

 

 

* 빈 리스트를 생성 하는 방법

 

① 리스트 = list()

② 리스트 = []

두가지는 동일하게 빈 리스트를 생성한다.

 

Q. 정수 n을 리스트로 생성하여 sort 할때 왜 list() 를 사용해야하는지?

Q. 정수 n을 리스트로 생성하여 숫자연산을 하고 싶을 때 int 로는 바로 변환이 불가능한지?

 

 

* 조원들과 이야기하면서 나왔는데

 

() 의 경우 함수 호출을 할 때 사용한다고 한다.

예를 들어 sort 등으로 정렬상태를 변경하는 경우인 듯 하다

매니저님께 제대로 물어보고 공부해야겠다!

 


  • 내일 진행 예정

1. 이번주 TIL 다시 한번 보기

2. SQL 코드카타

3. 알고리즘 코드카타

4. 알고리즘 코트카타 오늘 풀렸던 문제 다시 복습

'TIL' 카테고리의 다른 글

2024-04-04  (0) 2024.04.04
2024-04-03  (0) 2024.04.03
2024-04-01  (0) 2024.04.01
2024-03-31  (0) 2024.03.31
2024-03-30  (1) 2024.03.30