TIL: Python 학습 내용 https://datalearn.tistory.com/51
오늘 풀어본 문제:
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 주어진 문자열 s가 숫자의 일부 자릿수를 영단어로 바꾼 것이므로, 이를 원래 숫자로 변환하는 함수 solution을 작성하는 문제입니다.
문제 예시:
- 1478 → "one4seveneight"
- 234567 → "23four5six7"
- 10203 → "1zerotwozero3"
제한사항:
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
문제 풀이 순서:
- 영단어와 숫자를 매핑하는 딕셔너리를 생성합니다.
- 문자열 s에서 영단어를 숫자로 변환합니다.
- 최종 변환된 문자열을 정수로 반환합니다.
구체적 구현:
def solution(s):
num_dict = {
'zero' : '0',
'one' : '1',
'two' : '2',
'three' : '3',
'four' : '4',
'five' : '5',
'six' : '6',
'seven' : '7',
'eight' : '8',
'nine' : '9'
}
quiz = s
for word, num in num_dict.items():
quiz = quiz.replace(word, num)
answer = int(quiz)
return answer
상세 설명:
- 초기 설정:
- 숫자와 영단어를 매핑하는 딕셔너리 num_dict를 생성합니다.
- quiz 변수에 입력 문자열 s를 할당합니다.
- 문자 변환:
- num_dict의 각 항목을 순회하며, 영단어를 대응되는 숫자로 변환합니다.
- quiz.replace(word, num)를 통해 영단어를 숫자로 변환합니다.
- 결과 반환:
- 최종 변환된 문자열 quiz를 정수로 변환하여 answer에 저장합니다.
- 변환된 정수 answer를 반환합니다.
오늘 배운 점:
- 딕셔너리에 대해 이론만 공부를 해오다 처음으로 실습하여 풀어보았습니다.
- replace() 메서드를 통해 복잡할 수 있는 문자열 변환 작업을 간단하게 풀어내었습니다.
TIL: SQL 학습 내용 https://datalearn.tistory.com/52
오늘 풀어본 문제:
다음은 어느 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블과 자동차 대여 기록 정보를 담은 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블입니다. 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성하는 문제입니다. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해야 합니다.
문제 예시:
- CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 '세단' 종류의 자동차 중 10월에 대여를 시작한 자동차 ID 리스트를 출력해야 합니다.
- 결과는 자동차 ID를 기준으로 내림차순 정렬합니다.
구체적 구현:
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
ON C.CAR_ID = H.CAR_ID
WHERE C.CAR_TYPE = '세단'
AND DATE_FORMAT(H.START_DATE, '%m') = '10'
ORDER BY C.CAR_ID DESC;
상세 설명:
- 테이블 조인:
- CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블을 CAR_ID를 기준으로 INNER JOIN합니다.
- 조건 설정:
- CAR_TYPE이 '세단'인 자동차만 선택합니다.
- START_DATE의 월 부분이 10월인 대여 기록만 선택합니다 (DATE_FORMAT(H.START_DATE, '%m') = '10').
- 중복 제거 및 정렬:
- SELECT DISTINCT를 사용하여 중복된 CAR_ID를 제거합니다.
- ORDER BY C.CAR_ID DESC를 통해 CAR_ID를 기준으로 내림차순 정렬합니다.
- 번외)
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C inner join CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON C.CAR_ID = H.CAR_ID
WHERE CAR_TYPE = '세단' AND DATE_FORMAT(START_DATE,'%m') <= 10 AND DATE_FORMAT(END_DATE,'%m') >= 10
ORDER BY CAR_ID DESC
-
- 구현 중 실수 했던 사례) 문제 지문을 잘못 해석하여 렌트를 한 날 중 10월을 "포함" 하고 있는 차의 ID를 찾으려고 하였음
- 10월에 렌탈을 진행한 차량의 ID를 구한 이유가 무엇일 지 생각해 보았고 10월에 렌탈한 고객을 대상으로 특정한 이벤트를 진행하기 위해서 자료 조사를 실행한 것 같다는 생각이 들었다.
오늘 배운 점:
- 문제 지문을 잘 읽고 해석을 해야한다.
'TIL' 카테고리의 다른 글
본 캠프 13일차 TIL (0) | 2024.07.08 |
---|---|
본 캠프 12일차 TIL (0) | 2024.07.05 |
본 캠프 10일차 TIL (0) | 2024.07.03 |
본 캠프 9일차 TIL (0) | 2024.07.02 |
본 캠프 8일차 TIL (0) | 2024.07.01 |