TIL 23.01.12

쓰옹·2023년 1월 12일
0

개발자를 향해~~TIL✍

목록 보기
64/87

TODAY

  • 알고리즘 문제 풀이
  • sql 강의, 퀴즈 풀이

알고리즘

프로그래머스 숨어있는 숫자의 덧셈 문제풀이

class Solution {
    public int solution(String my_string) {
        my_string = my_string.replaceAll("[^1-9]", "");
        int num = Integer.valueOf(my_string);
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        return sum;
    }
}

처음에 이렇게 풀었는데 런타임 에러가 떴다.

런타임 에러 발생 요인

  1. 배열에 할당된 크기를 넘어서 접근했을 때
  2. 전역 배열의 크기가 메모리 제한을 초과할 때
  3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
  4. 0으로 나눌 떄
  5. 라이브러리에서 예외를 발생시켰을 때
  6. 재귀 호출이 너무 깊어질 때. 무한루프
  7. 이미 해제된 메모리를 또 참조할 때
  8. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때

https://www.acmicpc.net/board/view/22980

제한사항이 1 ≤ my_string의 길이 ≤ 1,000 이었기 때문에
Integer.valueOf(my_string) 할 경우 interger를 넘는 값이 나올 수 있기 때문이다.

public int solution(String my_string) {
	my_string = my_string.replaceAll("[^1-9]", "");
    int sum = 0;
    for (int i = 0; i < my_string.length(); i++) {
    	sum += Integer.valueOf(String.valueOf(my_string.charAt(i)));
    }
    return sum;
}

그래서 문자열을 문자로 자르고 그 문자 하나하나를 숫자로 바꿔서 더해준다.

  • 정규식으로 replaceAll() 대체해
    [^1-9] : 1부터 9가 아닌 것 , '': 공백으로

SQL

  • 제약조건
    • Primary Key
    • Foreign Key
    • Unique - 중복 불가
    • Check - 조건에 만족되는 값만 입력 가능
    • Default - 입력하지 않았을 때 자동 입력 값
    • NULL or NOT NULL
    • unsigned - 양수만
create table users
(
		id char(8) not null primary key,              #PK
		name varchar(10) not null,                    #NOT NULL
		email char(30) null unique,                   #Unique
		age tinyint unsigned null check (age >= 20)   #Chack
		phone1 char(3) default '02'                   #Default
		foreign key(mem_id) references member(mem_id) # FK
		on update cascade # 참조 데이터도 수정, 삭제
		on delete cascade
);
profile
기록하자기록해!

0개의 댓글