주노 님의 블로그

20240703 사전캠프 3일차 TIL 본문

TIL

20240703 사전캠프 3일차 TIL

juno0432 2024. 7. 3. 18:24

사전캠프 3일차 내용 간단요약

  • 14:00 ~ 14:10 : 어제 TIL 복습 
  • 14:10 ~ 15:10 : 알고리즘 공부 (13 ~ 18)
    int형 분리하기
  • 15:20 ~ 16:00 : 데일리 과제
    데일리 2주차 화요일 과제 - java톺아보기
    데일리 2주차 수요일 과제 - Lv1. 랜덤 닉네임 생성기
  • 16:00 ~ 18:00 : 강의 ( 엑셀보다 쉽고 빠른 SQL )
    SELECT절
    WHERE절

알고리즘 공부 - int형 분리하기

더보기

13. 자릿수 더하기

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

17. 자연수를 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

위 두 문제는 두가지 방법이 있다

1. 산술연산자 사용

2. long > str > long

 

13번 문제는 1번으로

17번 문제는 2번으로 풀어봤다

import java.util.Scanner;

// 13번째 06월 08일 자릿수 더하기 : 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
//예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
//
//제한사항
//N의 범위 : 100,000,000 이하의 자연수

public class cote13 {
    public static void main(String[] args) {
        Solution sol = new Solution();
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int result = sol.solution(num1);

        System.out.println(result);
    }
}

class Solution {
    public int solution(int n) {
        int answer = 0;
        while(true) {
            if (n < 10) {
                answer += n;
                break;
            }
            answer += n % 10;
            n = n / 10;
        }
        return answer;
    }
}

 

answer가 12345라고 가정했을때

 

answer += n % 10;

>> n을 10으로 나눈 나머지 즉 마지막 자리수를 뽑아낸 후 answer에 더한다

n = n / 10

>> n을 10으로 나눈다, 이러면 1의자리수는 사라지고 1234만 남게된다

반복문을 돌려 n이 10 미만일경우 남은 수를 더해준 후 브레이크 한다.

 

import java.util.Scanner;

// 17번째 06월 12일 자연수 뒤집어 배열로 만들기 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
public class cote17 {
    public static void main(String[] args) {
        Solution sol = new Solution();
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int [] result = sol.solution(num1);

        System.out.println(result);
    }
}

class Solution {
    public int[] solution(long n) {
        String number = Long.toString(n);
        int[] answer = new int [number.length()];

        for(int i = 0 ; i<number.length(); i++)
            answer[i] = Character.getNumericValue(number.charAt(number.length()-i-1));
        return answer;
    }
}

17번 문제이다

.toString()을 사용하면 자연수를 문자열로 변환해준다.

.length()를 하며 배열의 자리수를 딱맞게 선언해준다

 

예를들어 number = "12345"를 위와같이 작성하였을때

i가 0이라고 가정하자.

 

number.length() = 5이다.

Character.getNumericValue(number.charAt(number.length()-i-1)); 을 하나하나 분리해보자

 

Character.getNumericValue(number.charAt(number.length()-i-1));

>> 뒤집어서 역순부터 출력해야하니 끝값부터 (일의자리수) 받아온다 -1을 하는 경우는 배열은 0 부터 시작하기때문에..

>> 여기서 number.length()-i-1은 5-0-1로 4이다

 

Character.getNumericValue(number.charAt(number.length()-i-1));

>> 변수.charAt(index)는 변수의 index번째에 있는 문자를 반환해준다.

>> charAt(4)는 5이다.

 

Character.getNumericValue는 문자를 숫자로 변환한다.

위 방법을 쓰지않고도 사용할수 있는 방법은 아래와 같다

 

number.charAt(number.length() - 1 - i) - '0';

>> - '0'를 하는 이유는 charAt(index)는 문자를 반환해준다.

문자를 그대로 int로 변환할경우 아스키코드라는 값으로 변환을해준다. 문자 '0' 10진수값은 48

문자와 숫자의 0은 다르다.

따라서 위 코드에서 문자열을 숫자로 바꾸려면 -'0'를 하면된다.

 

아래는 챗지피티가 짜준 아스키코드표!

 


Java 톺아보기

더보기
  • 자바는 객체지향 프로그래밍 언어이다
    객체지향이란? 프로그램을 수많은 객체단위로 나누고 그것의 상호작용으로 서술하는 방식이다..
  • 자바로 프로그램을 제작하면 JVM으로 변환한다.
    JVM이란? java를 컴파일하면 나오는 바이트코드를 실행하기 위한 가상 머신이다.
  • 자바의 장점
    이식성 : 한번 작성되면 JVM이 설치된 모든 시스템에서 실행 가능하다.
    가장 많이 사용되는 언어 중 하나 : 가장 많이 사용되는 언어중 하나이므로 대규모 인재 풀과 짧은 학습곡선, 다양한 라이브러리등이 있다. 
    다양성 : 대규모 엔터프라이즈, 안드로이드 등 다양한 분야에서 사용된다

Spring

 

더보기

스프링에 대해 자료를 정리해도 살짝 이해가 어려워서 추후 수정하기! 아래는 챗지피티한테 물어본 결과이다.

 

  • Spring이란?
    자바 프레임워크이다. Django(Python)같이 자바는 Spring을 이용해 웹 어플리케이션을 개발한다.
  • Spring은 어떨때 사용하는가?
    웹, 보안등에 사용된다
  • 스프링의 특징
    1. 경량 컨테이너 : 필요에따라 가볍게 이용할 수 있다.
    2. 의존성 주입 : 객체간의 의존성을 스프링이 관리하여 결합도를 낮출 수 있다.
    3. POJO 기반 : 특별한 클래스를 상속받거나 인터페이스를 구현하지 않고도 개발이 가능하다.
    4. 테스트 : 강력한 테스트 지원을 통해 단위 테스트와 통합 테스트가 용이하다. 
  • 스프링의 장점
    1. 유연성과 확장성 : 다양한 모듈과 통합이  용이하며 필요에따라 확장 가능하다
    2. 생산성 향상 : 의존성 주입을통해 코드 작성이 단순해진다
    3. 테스트 용이 : 테스트가 용이하다.
  • 스프링의 단점
    1. 복잡성 : 초보에게는 Spring의 개념과 구성 요소가 복잡하게 느껴질 수 있다.
  • 스프링과 스프링 부트의 차이
    1. 설정 간소화 : 스프링 부트는 스프링 프레임워크의 복잡한 설정을 자동으로 처리해준다.
    2. 내장서버 : 스프링 부트는 내장 톰캣 등 서버를 제공하여, 별도 서버 설정 없이도 애플리케이션을 쉽게 진행 할 수 있게 해준다
    3. 의존성관리 : 의존성을 간편하게 관리할 수 있으며, 기본 라이브러리들을 자동으로 포함시켜준다

데일리 2주차 수요일 과제 - Lv1. 랜덤 닉네임 생성기

더보기
  • 리스트를 사용하라고 해서 ArrayList를 사용하였다.
    아래 간단하게 ArrayList를 설명하고 주말에 따로 카테고리만들어서 정리해야지ㅣ...
  • ArrayList란? 동적배열을 구현할 수 있는 클래스이다.
  • ArrayList의 특징
    1. 순서 유지
    2. 중복 허용
  • 주요메서드
    .add(e) : 요소를 리스트에 추가한다
    .get(index) : 해당 위치의 요소를 반환해준다
    .remove(e) : 해당 요소가 나타나는 첫번째 요소를 제거한다.
    .size() : 크기를 반환한다
    .contains(e) : 리스트에 요소가 포함되어있는지 확인한다.

 

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class rand {
    public static void main(String[] args) {
        //리스트 선언
        List<String> nick1 = new ArrayList<String>();
        List<String> nick2 = new ArrayList<String>();
        List<String> nick3 = new ArrayList<String>();

        //nick1 추가
        nick1.add("기절초풍");
        nick1.add("멋있는");
        nick1.add("재미있는");

        //nick2 추가
        nick2.add("도전적인");
        nick2.add("노란색의");
        nick2.add("바보같은");

        //nick3 추가
        nick3.add("돌고래");
        nick3.add("개발자");
        nick3.add("오랑우탄");

        //랜덤 돌리기
        Random rnd = new Random();
        String result = nick1.get(rnd.nextInt(nick1.size())) + " " + nick2.get(rnd.nextInt(nick2.size())) + " " + nick3.get(rnd.nextInt(nick3.size()));

        System.out.println("랜덤 닉네임 : " + result);
    }
}

 


강의 ( 엑셀보다 쉽고 빠른 SQL )

더보기

1. 1주차 1~2강

  • 1주차 1~2강
  • 데이터베이스란?
    데이터를 구조적으로 저장하고 관리하는 서비스
    MySQL, SQLite, Oracle등이 있음
  • 테이블이란 ?
    데이터 베이스 내에서 데이터를 저장하는 기본 단위. 특정 주제에 대한 내용을 저장함.
    고객의 정보를 저장하는 customers, 음식 주문 정보를 저장하는 food_orders 등
  • 컬럼이란?
    데이터를 저장하는 각 열

2. 1주차 3~4강 : Select

  • Select 이란?
    데이터를 조회하는 명령어
    사용방법 : Select 컬럼명 from 테이블명

    Select * ~ : 모든 컬럼을 가져온다
    Select * from food_orders : food_orders 테이블의 모든 컬럼을 가져온다

    select 컬럼명 from 테이블명 : 테이블의 특정한 컬럼을 가져온다

    select restaurant_name, addr from food_orders :  food_orders 테이블의  restaurant_name과 addr만 가져온다


    select 칼럼명1 별명1, 칼럼명2 as 별명2 from 테이블명 : 테이블을 특정한 칼럼을 불러온다, 다만 불러올때 칼럼은 별명으로 가져온다.
    select restaurant_name as "음식점", addr address from food_orders fo  :  food_orders 테이블의  restaurant_name과 addr만 가져오되, restaurant_name은 음식점으로, addr은 address로 가져온다.
    위의 사진과 다른점은 음식점과 address로 바뀌었다는점

    방법 1. 칼럼명 as 별명
    방법 2. 칼럼명 별명
    위 두가지 방법이 가능하다.

3. 1주차 5~7강 : Where절

  • Where절 이란?
    데이터를 조회할 때 특정 조건을 필터링해서 불러온다.
    사용방법 : Select 칼럼명 from 테이블 명 where 조건명


    SELECT * FROM customers c WHERE age=21 : customers 테이블에서 age가 21인것만 가져온다.

    =, >,  <,  >=,  <=,  !=(<>)가 사용가능하다

    문자열은 작은따옴표가 필요하다
    SELECT * FROM customers c WHERE gender='female’ : customers 테이블에서 gender이 female인것만 가져온다.

    BETWEEN A AND B : A이상 B이하(사이)의 값을 조회한다.
    SELECT * FROM customers c WHERE age BETWEEN 21 AND 23 :  customers 테이블에서 age가 21이상 23이하인 것만 가져온다.

    칼럼 IN (A, B, C) : 칼럼에서 A, B, C만 가져온다
    SELECT * FROM customers c WHERE age in (15, 21, 31) : customers 테이블에서 age가 15, 21, 31인 것만 가져온다.

    LIKE 'A%' : 문자열 패턴 매칭을 위해 사용한다
    SELECT * FROM customers c WHERE name like '김%' :  customers 테이블에서 name이 '김'으로 시작하는 것들을 가져온다.
    %: 문장
    김% : 김으로 시작하는것
    %김 : 김으로 끝나는것
    %김% : 중간에 김이 들어가는것
    _ : 단일 문자
    _김 : 김 앞에 단일문자가 있는것
    김_ : 김 뒤에 단일문자가 있는것
    _김_ : 중간에 김이 있는것

    WHERE 조건문 OR 조건문 : A조건을 만족하거나, B조건을 만족할때 (둘 중 하나만 만족하여도 가능)
    SELECT * FROM customers c WHERE name like '김%' or gender ='female’ :  customers 테이블에서 name이 '김'으로 시작 하거나, gender가 'female’인것을 가져온다.

    WHERE 조건문 OR 조건문 : A조건과, B조건을 만족할때 (둘다 만족해야함)
    SELECT * FROM customers c WHERE name like '김%' and gender ='female’ :  customers 테이블에서 name이 '김'으로 시작하고, gender가 'female’인것을 가져온다.

    NOT 조건문 : 조건문과 반대될때
    SELECT * FROM customers c WHERE not gender ='female’ :  customers 테이블에서 gender가 'female’이 아닌것을 가져온다.

4. 숙제

  • 상품 준비시간이 20~30분 사이인, 한국음식점의 식당명과 고객번호 조회하기.
    조건문이 필요한 컬럼 : 상품준비시간(food_preparation_time), 한국음식점(cuisine_type)
    조회할 컬럼 : 식당명(restaurant_name), 고객번호(customer_id)
    조회할 테이블 : food_orders
SELECT restaurant_name "식당명", customer_id "고객번호"
FROM food_orders fo 
WHERE food_preparation_time BETWEEN 20 and 30
AND cuisine_type = 'korean'