세조목

TIL(Today I Learned)11일차(23.12.12) 본문

데이터 분석 공부/TIL(Today I Learned)

TIL(Today I Learned)11일차(23.12.12)

세조목 2023. 12. 12. 21:28

1. SQL

 1) 프로그래머스 64번 문제

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

 

프로그래머스

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

programmers.co.kr

64번 문제에서는 공간을 둘 이상 등록한 유저를 '헤비 유저'로 부르며

이 '헤비 유저'가 등록한 공간의 정보를 아이디어 순으로 조회하라고 요구한다.

 

우선 '공간을 둘 이상 등록한 유저' 라는 조건이 있기때문에 WHERE절을 활용할 수 있을 것 같다.

공간을 둘 이상 등록한 유저를 어떻게 뽑아낼 수 있을까?

HAVING COUNT??

 

HAVING COUNT를 활용해서 작성한 코드는 아래와 같다.

SELECT ID,
       NAME,
       HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) > 1
ORDER BY ID

코드의 결과물은 아래와 같은데 두 명의 호스트가 두 개 이상의 방을 등록한 것은 알고 있지만

어떤 방을 등록했는지는 알수가 없다. 그렇다고 GROUP BY 절에 ID(또는 NAME)를 넣게 되면 COUNT값이 1개를 초과하는 값을 찾을 수 없기때문에 출력되는 값이 없어지게 된다.

 

그렇다면 어떻게 해야할까?

WHERE절에서 COUNT가 1개를 초과하는 HOST들을 먼저 뽑아내고

그 HOST들의 ID, NAME, HOST_ID를 출력하면 되지 않을까??

거를꺼 먼저 거르고 남은 애들에 한해서 출력해야하는 내용들을 출력하는 것이다.

SELECT ID,
       NAME,
       HOST_ID
FROM PLACES
WHERE HOST_ID IN
(
	SELECT HOST_ID
	FROM PLACES
	GROUP BY HOST_ID
	HAVING COUNT(*) > 1
)
ORDER BY ID

그렇게 작성한 코드는 위와 같으며 결과 값은 아래와 같다.

 

 

2. PYTHON

 1) 프로그래머스 13번 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12931#qna

 

프로그래머스

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

programmers.co.kr

13번 문제 요구사항이다.

자연수 N의 각 자리수의 합을 구하라고한다.

다른 프로그래밍 언어에서는 while문을 이용해서 풀긴하던데

python에서는 어떻게 풀어야하나 고민하던 중

string(문자)의 경우 인덱싱이 가능하다는 사실을 알고서

다음과 같이 코드를 작성해봤다.

def solution(n):
    answer=0
    for i in str(n):
        answer+=int(i)
    return answer
  1. 일단 자연수 n을 str( ) 안에 넣어서 문자화 시켜준다.
  2. 그러면 앞에서 언급한것처럼 인덱싱을 할 수 있기때문에 하나의 값을 먼저 가져와서 i에 넣어준 후
  3. int( ) 함수로 다시 정수화 시켜주고 answer에 더해준다.
  4. 이 과정을 자연수 n의 각 자리수를 모두 더할때까지 반복해주게 된다.

예를 들어 자연수 n의 값이 573이라고 가정해보자

  1. str(573)
  2. 5, 7, 3을 차례대로 가져와서
  3. int( ) 에 넣어준 후 answer에 더해주면 아래와 같이 계산이 이루어진다.

answer = 0(초기값) + 5

answer = 5 + 7

answer = 12 + 3

answer = 15

 

 2) 기타

  1. input으로 값을 입력받으면 type은 항상 str이다.
  2. .nf는 소수점 n자리까지 출력하라는 의미이다(ex. .2f는 소수점 둘째자리까지 출력해라는 의미).