TIL/코딩테스트 연습문제

[내일배움캠프] 사전캠프 코드카타 13번 문제

통촏하여주시옵소서 2024. 8. 10. 01:02

TIL 제출하기(매일 23:59 까지)
❤️‍🔥TIL : Today I Learned

매일 저녁, 공부를 마무리하면서 제출해주세요.
하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)

[TIL을 쓰는 이유]
1. 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
2. TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
3. 꾸준히 기록을 남기는 습관 가지기


알고리즘 코드카타

자연수 N이 주어졌을 때, N의 각 자릿수의 합을 구하는 함수 solution을 자바로 작성하는 방법을 설명하겠습니다.

문제 접근 방법

  1. 입력받은 자연수 N을 문자열로 변환합니다.
  2. 문자열의 각 자릿수를 순회하며 숫자로 변환하고 합을 구합니다.
  3. 최종적으로 구한 합을 반환합니다.

이 과정을 자바로 구현하면 다음과 같습니다.

구현 코드

public class Solution {
    public int solution(int N) {
        // 1. N을 문자열로 변환
        String strN = Integer.toString(N);

        // 2. 자릿수의 합을 저장할 변수
        int sum = 0;

        // 3. 문자열의 각 자릿수를 순회하며 합을 구함
        for (int i = 0; i < strN.length(); i++) {
            // 각 자릿수를 문자에서 정수로 변환 후 더함
            sum += Character.getNumericValue(strN.charAt(i));
        }

        // 4. 최종 합을 반환
        return sum;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();

        // 테스트 케이스
        int N1 = 123;
        int result1 = solution.solution(N1);
        System.out.println("N = " + N1 + " -> " + result1);  // 출력: N = 123 -> 6

        int N2 = 987;
        int result2 = solution.solution(N2);
        System.out.println("N = " + N2 + " -> " + result2);  // 출력: N = 987 -> 24
    }
}

코드 설명

  1. N을 문자열로 변환: Integer.toString(N)을 사용하여 자연수 N을 문자열로 변환합니다.
  2. 자릿수의 합을 저장할 변수: sum 변수를 초기화하여 자릿수의 합을 저장합니다.
  3. 문자열의 각 자릿수를 순회: for 루프를 사용하여 문자열의 각 자릿수를 순회합니다.
    • strN.charAt(i)를 사용하여 각 문자를 가져오고, Character.getNumericValue()를 사용하여 문자를 숫자로 변환합니다.
    • 변환한 숫자를 sum에 더합니다.
  4. 최종 합을 반환: 모든 자릿수를 더한 최종 합을 반환합니다.

테스트 케이스

  • N = 123일 때, 결과는 6이어야 합니다.
  • N = 987일 때, 결과는 24이어야 합니다.

SQL 코드카타

USER_INFO 테이블에서 나이 정보가 없는 회원 수를 세는 SQL 쿼리

이 글에서는 의류 쇼핑몰에 가입한 회원 정보를 담고 있는 USER_INFO 테이블에서 나이 정보가 없는 회원 수를 세는 SQL 쿼리를 작성하는 방법을 알아보겠습니다. 이 테이블에는 회원 ID, 성별, 나이, 가입일 컬럼이 있습니다. 나이 정보가 없는 회원 수를 구하고 그 결과를 USERS라는 컬럼명으로 출력하는 쿼리를 작성해보겠습니다.

테이블 구조

USER_INFO 테이블의 구조는 다음과 같습니다:

컬럼명타입널 허용 여부

USER_ID INTEGER FALSE
GENDER TINYINT(1) TRUE
AGE INTEGER TRUE
JOINED DATE FALSE
  • USER_ID: 각 사용자를 고유하게 식별하는 ID입니다.
  • GENDER: 사용자의 성별로, NULL, 0 (남자), 1 (여자) 값을 가질 수 있습니다.
  • AGE: 사용자의 나이로, NULL 값을 가질 수 있습니다.
  • JOINED: 사용자가 가입한 날짜입니다.

문제 설명

USER_INFO 테이블에서 나이 정보가 없는 (AGE 컬럼이 NULL인) 회원의 수를 세는 SQL 쿼리를 작성해야 합니다. 결과는 USERS라는 컬럼명으로 출력해야 합니다.

예시

다음과 같은 USER_INFO 테이블이 주어졌을 때:

USER_IDGENDERAGEJOINED

1 1 26 2021-06-01
2 NULL NULL 2021-07-25
3 1 NULL 2021-07-30
4 0 31 2021-08-03

나이 정보가 없는 회원은 2명 (USER_ID 2와 USER_ID 3)이므로, 결과는 다음과 같이 나와야 합니다:

USERS

2

SQL 쿼리

이를 해결하기 위한 SQL 쿼리는 다음과 같습니다:

SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE AGE IS NULL;

설명

  1. SELECT COUNT(*) AS USERS: 조건에 맞는 행의 수를 세고 결과를 USERS라는 이름으로 출력합니다.
  2. FROM USER_INFO: 데이터를 조회할 테이블을 지정합니다.
  3. WHERE AGE IS NULL: AGE 컬럼이 NULL인 행만 선택합니다.

자세한 설명

  1. COUNT 함수: COUNT(*) 함수는 WHERE 조건을 만족하는 모든 행의 수를 셉니다.
  2. 별칭 사용: AS USERS를 사용하여 출력 컬럼명을 USERS로 지정합니다.
  3. 필터 조건: WHERE AGE IS NULL 조건을 사용하여 AGE 컬럼이 NULL인 행만 선택합니다.

일일과제, Lv2. 스파르타 자판기

import java.util.Map;
import java.util.Scanner;

public class BeverageVendingMachine {

    public static void main(String[] args) {
        // Step 1: 음료 이름과 가격을 저장하는 맵을 생성합니다
        Map<String, Integer> beverages = Map.of(
            "사이다", 1700,
            "콜라", 1900,
            "식혜", 2500,
            "솔의눈", 3000
        );

        // Step 2: 음료와 가격을 표시합니다
        System.out.println("음료 메뉴:");
        for (Map.Entry<String, Integer> beverage : beverages.entrySet()) {
            System.out.println(beverage.getKey() + ": " + beverage.getValue() + "원");
        }

        // Step 3: 사용자로부터 음료 선택을 입력받습니다
        Scanner scanner = new Scanner(System.in);
        System.out.print("어떤 음료를 선택하시겠습니까? ");
        String userChoice = scanner.nextLine();

        // Step 4: 선택한 음료가 목록에 있는지 확인합니다
        if (beverages.containsKey(userChoice)) {
            // Step 5: 사용자가 넣을 돈을 입력받습니다
            System.out.print("얼마를 넣으시겠습니까? ");
            int coin = scanner.nextInt();

            // Step 6: 넣은 돈이 충분한지 확인합니다
            if (coin < beverages.get(userChoice)) {
                System.out.println("돈이 부족합니다.");
            } else {
                // Step 7: 잔액을 계산하고 표시합니다
                int remain = coin - beverages.get(userChoice);
                System.out.println(userChoice + "을/를 구매하셨습니다.");
                System.out.println("잔액: " + remain + "원");
            }
        } else {
            // 목록에 없는 음료를 선택한 경우
            System.out.println("목록에 없는 음료입니다. 실행을 종료합니다.");
        }

        // 스캐너를 닫습니다
        scanner.close();
    }
}

느낀점

[11일차] 알고리즘 코드카타 08.08(목)_SQL이랑 언어알고리즘을 같이 담아서 썻다