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;
}
}
처음에 이렇게 풀었는데 런타임 에러가 떴다.
런타임 에러 발생 요인
- 배열에 할당된 크기를 넘어서 접근했을 때
- 전역 배열의 크기가 메모리 제한을 초과할 때
- 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
- 0으로 나눌 떄
- 라이브러리에서 예외를 발생시켰을 때
- 재귀 호출이 너무 깊어질 때. 무한루프
- 이미 해제된 메모리를 또 참조할 때
- 프로그램(main 함수)이 0이 아닌 수를 반환했을 때
제한사항이 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가 아닌 것 , ''
: 공백으로 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
);