늦은 프로그래밍 이야기
230131 TIL (알고리즘, JPA 심화) 본문
알고리즘
숨어있는 숫자의 덧셈 (1)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
문자열 안에 정수와 알파벳 대문자, 소문자가 혼합되어 들어있는데 그 중 숫자만 골라내어 숫자들 각각의 합을 구하는 문제였다. 처음에 parseInt만 사용하려 했으나, NumberFormatException 때문에 되지 않았다. 정규식을 사용하면 될 것 같아서 인텔리제이에서 메소드를 내려보며 찾아보다가 replaceAll에 정규식을 사용할 수 있는 것을 발견하였다.
정규식을 사용하여 알파벳들을 제거해주고 정수만 남겨 parseInt 해주고 해당 숫자의 모든 자리수를 더해주는 반복문을 작성하였다. 예시 2문제는 모두 맞춰서 정답인줄 알았지만, 결과확인에서 런타임 에러가 발생했다.
public int solution(String my_string) {
int answer = 0;
my_string = my_string.replaceAll("[a-zA-Z]", "");
int s = Integer.parseInt(my_string);
while (s != 0) {
answer += s % 10;
s = s / 10;
}
return answer;
}
문제 될 것이 없어 보였지만, 해당 문제의 제한사항에 my_string의 길이가 최대 1000까지인 것을 확인하지 못해서 발생한 문제이다. 문자열의 길이가 길어 int로 형변환하면 int의 범위를 넘는 숫자가 들어오기 때문에 런타임 에러가 발생한 것 같다.
public int solution(String my_string) {
int answer = 0;
my_string = my_string.replaceAll("[a-zA-Z]", "");
for (int i = 0; i < my_string.length(); i++) {
answer += Integer.parseInt(String.valueOf(my_string.charAt(i)));
}
return answer;
}
int형으로 전체 문자열을 parse 하는 것 대신 반복문 내에서 문자열 상태로 한글자씩 parsing 하여 answer에 더해주었다.
간단한 문제처럼 보였지만, 최대 1000자리 수까지의 범위를 가지다 보니 꽤 까다로운 문제가 되었다. 잊을만 하면 등장하는 데이터의 크기를 항상 신경써야 할 것이다.
'내일배움캠프 > TIL, WIL' 카테고리의 다른 글
| 230202 TIL (JPA 심화) (0) | 2023.02.03 |
|---|---|
| 230201 TIL (JPA 심화) (0) | 2023.02.01 |
| 13주차 WIL (0) | 2023.01.29 |
| 230127 TIL (알고리즘, 리팩토링) (0) | 2023.01.28 |
| 230126 TIL (알고리즘, 테스트코드) (0) | 2023.01.26 |
Comments