본문 바로가기
TIL

본 캠프 22일차 TIL

by Data 학습자 2024. 7. 15.

TIL: Python 학습 내용

오늘 풀어본 문제:

 

수포자 삼인방은 모의고사에 수학 문제를 전부 찍습니다. 1번 문제부터 마지막 문제까지 각 수포자의 정답 패턴이 주어질 때, 가장 많은 문제를 맞힌 사람을 찾는 문제입니다. 가장 높은 점수를 받은 사람이 여럿일 경우, 오름차순으로 정렬하여 반환합니다.

 

제한 조건:

  • 시험은 최대 10,000 문제로 구성됩니다.
  • 문제의 정답은 1, 2, 3, 4, 5 중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬합니다.

구체적 구현:

 
def solution(answers):
    # 각 수포자의 정답 패턴 정의
    arr1 = [1, 2, 3, 4, 5]
    arr2 = [2, 1, 2, 3, 2, 4, 2, 5]
    arr3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    # 각 수포자의 점수를 저장할 리스트
    scores = [0, 0, 0]
    
    # 정답 배열과 각 수포자의 패턴 비교
    for i in range(len(answers)):
        if answers[i] == arr1[i % len(arr1)]:
            scores[0] += 1
        if answers[i] == arr2[i % len(arr2)]:
            scores[1] += 1
        if answers[i] == arr3[i % len(arr3)]:
            scores[2] += 1
    
    # 가장 높은 점수를 찾기
    max_score = max(scores)
    
    # 가장 높은 점수를 받은 수포자 찾기
    answer = []
    for i in range(len(scores)):
        if scores[i] == max_score:
            answer.append(i + 1)
    
    return answer

 

 

  1. 정답 패턴 정의:
    •    arr1, arr2, arr3 리스트를 사용하여 각 수포자의 정답 패턴을 정의합니다.
  2. 점수 계산:
    •    scores 리스트를 사용하여 각 수포자의 점수를 0으로 초기화합니다.answers 리스트를 순회하면서 각 수포자 의 패턴과 비교하여 맞힌 문제 수를 계산합니다.
  3. 최고 점수 계산:
    •    max(scores)를 사용하여 가장 높은 점수를 계산합니다.
  4. 최고 점수 수포자 찾기:
    •    scores 리스트를 순회하면서 가장 높은 점수를 받은 수포자의 인덱스를 찾아 answer 리스트에 추가합니다.
  5. 결과 반환:nswer 리스트를 반환하여 가장 높은 점수를 받은 수포자를 오름차순으로 출력합니다.
  • 오늘 배운 점:
    • 리스트의 순회와 조건 비교를 통해 문제를 해결하는 방법을 배웠습니다.
    • 파이썬을 통해서 여러 패턴을 비교하여 가장 높은 점수를 찾는 방법을 익혔습니다.

TIL: SQL 학습 내용

 

오늘 풀어본 문제:

 

중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 정보를 조회하는 문제입니다. 조회할 정보는 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태입니다. 거래상태는 'SALE'이면 '판매중', 'RESERVED'이면 '예약중', 'DONE'이면 '거래완료'로 출력해야 하며, 결과는 게시글 ID를 기준으로 내림차순 정렬해야 합니다.

 

구체적 구현:

 
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
    CASE WHEN STATUS = 'SALE' THEN '판매중'
         WHEN STATUS = 'DONE' THEN '거래완료'
         WHEN STATUS = 'RESERVED' THEN '예약중'
    END AS STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

 

  1. SELECT 절:
    1. BOARD_ID, WRITER_ID, TITLE, PRICE 컬럼을 선택합니다.
    2. CASE 문을 사용하여 STATUS 컬럼의 값을 조건에 따라 변환합니다.
      1. STATUS가 'SALE'이면 '판매중'
      2. STATUS가 'DONE'이면 '거래완료'
      3. STATUS가 'RESERVED'이면 '예약중'
    3. 변환된 STATUS 값을 AS STATUS로 새로운 컬럼으로 지정합니다.
  2. WHERE 절:
    •    CREATED_DATE가 '2022-10-05'인 행만 선택합니다.
  3. ORDER BY 절:
    •    BOARD_ID를 기준으로 내림차순 정렬하여 최근 게시글이 먼저 나오도록 합니다.

 

  • 오늘 배운 점:
    • REGEXP를 통해서 하나의 컬럼의 값 안에 여러가지 답을 넣을 수 없다는 사실을 알았습니다.

 

'TIL' 카테고리의 다른 글

본 캠프 24일차 TIL  (0) 2024.07.17
본 캠프 23일차 TIL  (0) 2024.07.16
본 캠프 21일차 TIL  (0) 2024.07.14
본 캠프 20일차 TIL  (0) 2024.07.13
본 캠프 19일차 TIL  (0) 2024.07.12