늦은 프로그래밍 이야기

230131 TIL (알고리즘, JPA 심화) 본문

내일배움캠프/TIL, WIL

230131 TIL (알고리즘, JPA 심화)

한정규 2023. 1. 31. 23:50

알고리즘

숨어있는 숫자의 덧셈 (1)

코딩테스트 연습 - 숨어있는 숫자의 덧셈 (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