3/10 TIL

큰모래·2023년 3월 12일
0
post-custom-banner

SQL (MySQL)


  • CHAR VS VARCHAR
    CHARVARCHAR
    속도빠름느림
    저장용량저장용량 소모 많음저장용량 소모 절약
  • EXPLAIN
    • SQL 앞에 EXPLAIN 을 붙이면, 해당 SQL을 실행하기 위한 실행 계획을 확인할 수 있다.
    • INDEX 유무 판단도 가능하다.

문제 1

  • 각 부서별 부서명과 사원수
    SELECT D.name AS 부서명, CONCAT(COUNT(E.id),'명') AS 사원수
    FROM dept AS D LEFT JOIN emp AS E ON D.id = E.deptId
    GROUP BY D.name
    ORDER BY 사원수

문제 2

  • 데이터 2배 증가 쿼리문 (기존 테이블에 데이터가 2개 있다는 가정하에 2의 제곱배로 늘어남)
    INSERT INTO 테이블명 (칼럼1, 칼럼2, 칼럼3)
    SELECT 데이터1, 데이터2, 데이터3
    FROM 테이블명
  • 인덱스
    • 테이블의 데이터 동작속도를 증가시켜주는 기능
    • 백과사전에서 단어를 찾을 때 ‘ㄱ’ ‘ㄴ’ 처럼 색인 역할을 한다.
    • 조회 속도가 빨라지는 대신 삽입,삭제,수정 속도는 느려진다.
    • 종류
      • PRIMARY KEY : 주 키 인덱스
        • UNIQUE, NOT NULL
      • UNIQUE KEY : 유니크 인덱스
        • UNIQUE
      • NORMAL KEY : 일반 인덱스
        • NOT UNIQUE
      • FULL TEXT : 풀 텍스트 인덱스
        • 본문검색에 사용할 수 있는 인덱스
        • 한글을 지원 X
  • 유니크 인덱스
    • 컬럼 값에 중복이 존재하지 않도록 하는 인덱스
    • 유니크 인덱스는 인덱스라기보다는 제약조건에 가깝다.
    • INSERT 시 유니크 인덱스는 중복체크를 해야하므로 속도가 일반 인덱스에 비해 느리다.
    • 커다란 성능 향상을 기대하면 안된다.

자바


문자열 계산기

  • "3 + 3 - 1" 형식의 문자열을 숫자 결과값으로 리턴해야함.
  • 최종목표
    • 3 * 1 + (1 - (4 * 1 - (1 - 1))

더하기 기능

  • split 을 통해 문자열을 + 로 나눈다.
  • 나눈 두 문자를 정수형으로 바꿔 합을 리턴한다.
	public class Calc {

	    public static int run(String exp) {
        String[] bits = exp.split(" \\+ ");

        int a = Integer.parseInt(bits[0]);
        int b = Integer.parseInt(bits[1]);

        return a + b;
	    }

	}

테스트

public class CalcTest {
    @Test
    @DisplayName("1 + 1 = 2")
    void t1() {
        assertThat(Calc.run("1 + 1")).isEqualTo(2);
    }

    @Test
    @DisplayName("2 + 1 = 3")
    void t2() {
        assertThat(Calc.run("2 + 1")).isEqualTo(3);
    }

    @Test
    @DisplayName("2 + 2 = 4")
    void t3() {
        assertThat(Calc.run("2 + 2")).isEqualTo(4);
    }

    @Test
    @DisplayName("1000 + 280 = 1280")
    void t4() {
        assertThat(Calc.run("1000 + 280")).isEqualTo(1280);
    }
}

다중 덧셈, 뺄셈 기능

  • 문자열에 +를 포함하면 needToPlustrue , needToMinus 도 마찬가지
  • 만약 needToPlustrue라면 +split
  • 만약 needToMinustrue라면 -split
  • 반복문을 통해 분리한 숫자들의 결과를 계산한다.
public class Calc {

    public static int run(String exp) {

        boolean needToPlus = exp.contains("+");
        boolean needToMinus = exp.contains("-");

        String[] bits = null;

        if (needToPlus) {
            bits = exp.split(" \\+ ");
        } else if (needToMinus) {
            bits = exp.split(" \\- ");
        }

        int a = Integer.parseInt(bits[0]);
        int b = Integer.parseInt(bits[1]);

        if (needToPlus) {
            int sum = 0;
            for (String bit : bits) {
                sum += Integer.parseInt(bit);
            }
            return sum;
        }
        if (needToMinus) {
            return a - b;
        }

        throw new RuntimeException("올바른 계산식이 아닙니다.");
    }

}

테스트

		@Test
    @DisplayName("2 - 1 = 1")
    void t5() {
        assertThat(Calc.run("2 - 1")).isEqualTo(1);
    }

    @Test
    @DisplayName("3 - 1 = 2")
    void t6() {
        assertThat(Calc.run("3 - 1")).isEqualTo(2);
    }

    @Test
    @DisplayName("100 - 20 = 80")
    void t7() {
        assertThat(Calc.run("100 - 20")).isEqualTo(80);
    }

    @Test
    @DisplayName("10 + 20 + 30 = 60")
    void t8() {
        assertThat(Calc.run("10 + 20 + 30")).isEqualTo(60);
    }

덧셈,뺄셈 혼합 기능

  • “- " 문자를 “+ -” 로 변경
  • 이렇게 되면 문자를 정수형으로 바꿀 때 오류 없이 음수로 변경된다.
  • 이후, 반복문을 통해 합을 구해 리턴
public class Calc {

    public static int run(String exp) {

        exp = exp.replaceAll("- ", "+ -");

        String[] bits = null;

        bits = exp.split(" \\+ ");
        int sum = 0;

        for (String bit : bits) {
            sum += Integer.parseInt(bit);
        }

        return sum;
    }

}

테스트

		@Test
    @DisplayName("10 - 20 + 30 = 20")
    void t9() {
        assertThat(Calc.run("10 - 20 + 30")).isEqualTo(20);
    }

    @Test
    @DisplayName("10 - 10 - 10 - 10 = -20")
    void t10() {
        assertThat(Calc.run("10 - 10 - 10 - 10")).isEqualTo(-20);
    }

    @Test
    @DisplayName("10 - 10 - 10 - 10 + 10 + 10 - 10 = -10")
    void t11() {
        assertThat(Calc.run("10 - 10 - 10 - 10 + 10 + 10 - 10")).isEqualTo(-10);
    }
profile
큰모래
post-custom-banner

0개의 댓글