본문 바로가기
TIL

본 캠프 20일차 TIL

by Data 학습자 2024. 7. 13.

TIL: Python 학습 내용

오늘 풀어본 문제:

코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다. 각 카드 뭉치에서 카드를 순서대로 한 장씩 사용하여 주어진 순서의 단어 배열을 만들 수 있는지 확인하는 문제입니다.

제한사항:

  • 1 ≤ cards1의 길이, cards2의 길이 ≤ 10
  • 1 ≤ cards1[i]의 길이, cards2[i]의 길이 ≤ 10
  • cards1과 cards2에는 서로 다른 단어만 존재합니다.
  • 2 ≤ goal의 길이 ≤ cards1의 길이 + cards2의 길이
  • 1 ≤ goal[i]의 길이 ≤ 10
  • goal의 원소는 cards1과 cards2의 원소들로만 이루어져 있습니다.
  • cards1, cards2, goal의 문자열들은 모두 알파벳 소문자로만 이루어져 있습니다.

구체적 구현:

 
def solution(cards1, cards2, goal):
    idx1, idx2 = 0, 0
    
    for word in goal:
        if idx1 < len(cards1) and cards1[idx1] == word:
            idx1 += 1
        elif idx2 < len(cards2) and cards2[idx2] == word:
            idx2 += 1
        else:
            return "No"
    
    return "Yes"
  1. 초기 설정:
    • idx1과 idx2 변수를 0으로 초기화하여 cards1과 cards2의 인덱스를 추적합니다.
  2. 단어 배열 확인:
    • goal 리스트를 순회하면서 각 단어가 cards1 또는 cards2의 현재 위치에 있는지 확인합니다.
    • 현재 단어가 cards1에 있으면 idx1을 증가시키고, cards2에 있으면 idx2를 증가시킵니다.
    • 현재 단어가 어느 카드 뭉치에서도 찾을 수 없으면 "No"를 반환합니다.
  3. 결과 반환:
    • 모든 단어를 확인한 후, 문제가 없다면 "Yes"를 반환합니다.

오늘 배운 점:

  • 두 개의 리스트를 동시에 순회하면서 조건을 확인하는 방법이 있다는 사실을 배웠습니다.

TIL: SQL 학습 내용

오늘 풀어본 문제:

중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 회원 정보를 담은 USED_GOODS_USER 테이블에서, 중고 거래 게시물을 3건 이상 등록한 사용자의 정보를 조회하는 문제입니다. 조회 결과는 사용자 ID를 기준으로 내림차순 정렬해야 합니다.

구체적 구현:

 
SELECT U.USER_ID, U.NICKNAME, 
       CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', IFNULL(U.STREET_ADDRESS2, '')) AS 전체주소, 
       CONCAT(SUBSTR(U.TLNO, 1, 3), '-', SUBSTR(U.TLNO, 4, 4), '-', SUBSTR(U.TLNO, 8)) AS 전화번호
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID, U.NICKNAME, U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2, U.TLNO
HAVING COUNT(B.BOARD_ID) >= 3
ORDER BY U.USER_ID DESC;

 

  1. JOIN 사용:
    • USED_GOODS_BOARD 테이블과 USED_GOODS_USER 테이블을 WRITER_ID와 USER_ID를 기준으로 내부 조인합니다.
  2. GROUP BY 사용:
    • USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO 컬럼을 그룹화하여 사용자별로 데이터를 집계합니다.
  3. HAVING 절 사용:
    • COUNT(B.BOARD_ID)가 3 이상인 사용자만 필터링하여 재거래한 사용자를 추출합니다.
  4. 주소와 전화번호 형식 변경:
    • CONCAT 함수를 사용하여 전체 주소와 전화번호를 형식에 맞게 변환합니다. STREET_ADDRESS2가 NULL인 경우를 처리하기 위해 IFNULL 함수를 사용합니다.
  5. 정렬:
    • USER_ID를 기준으로 내림차순 정렬하여 결과를 반환합니다.

오늘 배운 점:

  • 문자열 변환 함수CONCAT을 사용하여 데이터의 형식을 특정한 형식으로 변환하여 출력하는 방법을 익혔습니다.

 

 

 

 

 

 

'TIL' 카테고리의 다른 글

본 캠프 22일차 TIL  (3) 2024.07.15
본 캠프 21일차 TIL  (0) 2024.07.14
본 캠프 19일차 TIL  (0) 2024.07.12
본 캠프 18일차 TIL  (0) 2024.07.11
본 캠프 17일차 TIL  (0) 2024.07.10