본문 바로가기
TIL

본 캠프 10일차 TIL

by Data 학습자 2024. 7. 3.

TIL: Python 학습 내용 https://datalearn.tistory.com/49

오늘 풀어본 문제:

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식인 시저 암호를 구현하는 문제입니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수 solution을 완성하는 것이 목표입니다.

 

문제 풀이 순서: 

  1. 주어진 문자열 s를 순회하며 각 문자를 처리합니다.
  2. 알파벳 문자인 경우, 대문자와 소문자를 구분하여 처리합니다.
  3. 공백 문자는 그대로 유지합니다.
  4. 최종 결과 문자열을 반환합니다.

구체적 구현:

def solution(s, n):
    answer = ""
    
    for abc in s:
        if abc.isalpha():        # 알파벳인지 확인
            if abc.isupper():    # 대문자 일 경우
                abc_set = ord('A')
            else:                # 대문자가 아닐 경우
                abc_set = ord('a')
                
            # abc의 값을 n 만큼 밀어내는 조건문
            new_char = chr((ord(abc) - abc_set + n) % 26 + abc_set)
            answer += new_char
        else:   # 공백일 경우
            answer += abc  
    return answer

상세 설명:

  1. 초기 설정:
    •   answer 변수를 빈 문자열로 초기화하여 결과를 저장할 준비를 합니다.
  2. 문자 순회 및 변환:
    •   입력 문자열 s의 각 문자를 순회합니다.
    •   abc.isalpha()를 사용하여 문자가 알파벳인지 확인합니다.
      •   대문자 처리:
        • 대문자인 경우, ord('A')를 기준값으로 설정하여 abc_set에 저장합니다.
      • 소문자 처리:
        •   소문자인 경우, ord('a')를 기준값으로 설정하여 abc_set에 저장합니다.
      • 문자 변환:
        •   새로운 문자 new_char를 계산합니다.
        •   ord(abc) - abc_set로 현재 문자의 위치를 기준값으로부터의 거리를 계산합니다.
        •   + n으로 이동 거리를 더하고 % 26으로 알파벳 범위를 순환하도록 합니다.
        •   + abc_set으로 다시 문자로 변환하여 chr() 함수를 통해 새로운 문자를 얻습니다.
    •   공백 문자는 그대로 answer에 추가합니다.
  3. 결과 반환:
    •   모든 문자를 처리한 후, 최종 결과 문자열 answer를 반환합니다.

오늘 배운 점:

  •   ord()와 chr() 함수를 사용하여 문자와 아스키 코드 값을 상호 변환하는 방법을 익혔습니다.
  •   문자열을 순회하며 조건에 따라 처리하는 방법을 연습하였습니다.

 


TIL: SQL 학습 내용 https://datalearn.tistory.com/50

오늘 풀어본 문제:

다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. 이 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성하는 문제입니다. 전화번호가 NULL인 경우는 출력 대상에서 제외하고, 결과는 회원 ID를 기준으로 오름차순 정렬해야 합니다.

 

문제 풀이 순서:

  1.   생일이 3월인 여성 회원을 조회하기 위해 DATE_OF_BIRTH 컬럼의 월 부분을 추출합니다.
  2.   GENDER가 'W'인 회원만 조회합니다.
  3.   전화번호(TLNO)가 NULL이 아닌 경우만 출력 대상에 포함시킵니다.
  4.   결과를 회원 ID를 기준으로 오름차순 정렬합니다.

구체적 구현:

SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') as DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE DATE_FORMAT(DATE_OF_BIRTH, '%m') = '03' 
  AND TLNO IS NOT NULL 
  AND GENDER = 'W'
ORDER BY MEMBER_ID;

 

상세 설명:

  1. 조건 설정:
    •   DATE_FORMAT(DATE_OF_BIRTH, '%m') = '03': 생일의 월 부분이 3월인 회원을 필터링합니다.
    •   GENDER = 'W': 성별이 여성인 회원만 조회합니다.
    •   TLNO IS NOT NULL: 전화번호가 NULL이 아닌 회원만 포함시킵니다.
  2. 결과 정렬:
    •   ORDER BY MEMBER_ID: 회원 ID를 기준으로 오름차순 정렬합니다.
  3. 결과 형식:
    •   DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') as DATE_OF_BIRTH: 생년월일을 'YYYY-MM-DD' 형식으로 출력합니다.

오늘 배운 점:.

  •   오늘은 배운 점보다 알고 있던 것들을 복습을 했다고 느꼈다.

'TIL' 카테고리의 다른 글

본 캠프 12일차 TIL  (0) 2024.07.05
본 캠프 11일차 TIL  (0) 2024.07.04
본 캠프 9일차 TIL  (0) 2024.07.02
본 캠프 8일차 TIL  (0) 2024.07.01
본 캠프 7일차 TIL 제출용  (0) 2024.06.30