TIL(Today I Learned)_데일리루틴_24.11.20.Wed

728x90

데일리루틴 SQL

MySQL 3월에 태어난 여성 회원 목록 출력하기 정답입니다.
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE DATE_FORMAT(DATE_OF_BIRTH, '%m') = 3 AND TLNO IS NOT NULL AND GENDER = 'W'
ORDER BY MEMBER_ID

 

  • MONTH(DATE_OF_BIRTH) = 3:
    • 생일의 월이 3월인 회원만 조회합니다.
  • GENDER = 'W':
    • 여성 회원만 필터링합니다.
  • TLNO IS NOT NULL:
    • 전화번호가 NULL이 아닌 경우만 조회합니다.
  • ORDER BY MEMBER_ID ASC:
    • 회원 ID를 기준으로 오름차순 정렬합니다.
  • DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH:
    • 생년월일의 포맷을 YYYY-MM-DD로 출력합니다.

 


데일리루틴 알고리즘

Java 시저 암호 정답입니다.
class Solution {
    public String solution(String s, int n) {
        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);

            if (ch >= 'a' && ch <= 'z') { // 소문자일 경우
                char shifted = (char) ((ch - 'a' + n) % 26 + 'a');
                answer.append(shifted);
            } else if (ch >= 'A' && ch <= 'Z') { // 대문자일 경우
                char shifted = (char) ((ch - 'A' + n) % 26 + 'A');
                answer.append(shifted);
            } else { // 공백일 경우
                answer.append(ch);
            }
        }

        return answer.toString();
    }
}

 

  • 문자열 s의 각 문자를 하나씩 확인하면서 대소문자를 구분하여 처리합니다.
  • 만약 문자가 소문자(a ~ z)라면, (ch - 'a' + n) % 26 + 'a'를 통해 문자를 순환적으로 밀어줍니다.
  • 대문자(A ~ Z)도 동일한 방식으로 처리합니다.
  • 공백 문자는 그대로 유지됩니다.
  • 최종 결과 문자열은 StringBuilder를 사용해 만들고 반환합니다.

가장 구현하기 어려웠던 char shifted = (char) ((ch - 'a' + n) % 26 + 'a'); 설명

 

  • ch - 'a':
    • 여기서 ch는 현재 처리하고 있는 문자입니다.
    • 'a'는 ASCII 값으로 97이고, ch - 'a'는 문자 ch가 'a'로부터 얼마나 떨어져 있는지를 계산하는 것입니다.
    • 예를 들어, 만약 ch가 'c'라면, 'c' - 'a'는 2가 됩니다. 이는 알파벳에서 'c'가 'a'로부터 2번째 떨어져 있다는 것을 의미합니다.
  • (ch - 'a' + n):
    • 이제 n을 더하여 문자 ch를 n만큼 이동시킵니다.
    • 예를 들어, ch가 'c'이고, n이 3이라면, (ch - 'a' + n)은 2 + 3 = 5가 됩니다.
    • 이는 'c'에서 알파벳 순서로 3만큼 뒤로 이동한 값을 의미합니다.
  • (ch - 'a' + n) % 26:
    • 알파벳은 총 26글자로 이루어져 있으므로, % 26 연산을 통해 알파벳 순환을 처리합니다.
    • 예를 들어, 'z'에서 1만큼 밀 경우, 'a'로 돌아가야 합니다. 따라서 모듈러 연산을 사용하여 26을 넘어가는 경우 알파벳의 처음으로 돌아가게 합니다.
    • 예를 들어, 'z'에 대해 (ch - 'a' + n)이 25 + 1 = 26이 됩니다. 이때 26 % 26은 0이 되어 'a'로 돌아가게 됩니다.
  • (ch - 'a' + n) % 26 + 'a':
    • (ch - 'a' + n) % 26의 결과는 'a'로부터 몇 번째 떨어져 있는지에 대한 숫자가 됩니다.
    • 이를 다시 'a'에 더해주어 이동된 알파벳 문자로 변환합니다.
    • 예를 들어, (ch - 'a' + n) % 26이 5라면, 5 + 'a'는 문자 'f'가 됩니다.
  • (char):
    • 최종적으로 이 값은 정수이기 때문에, 이를 문자로 형변환하기 위해 (char)를 사용합니다.
    • 이렇게 하면 최종적으로 이동된 알파벳 문자(shifted)가 됩니다.

 

 

728x90
반응형
LIST