Programers코테연습(Java)

[Programmers TIL 1일차] 문자열 정수의 합

코철이 2024. 4. 19. 12:37

 

1. 문제

한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.

제한 사항 : 3 <= num_str <= 100

 

 

 

2. 풀이

class Solution {
    public int solution(String num_str) {
        int answer = 0;
        
        for(int i = 0 ; i < num_str.length(); i++){
            int num = Integer.parseInt(num_str.substring(i,i+1));
            answer += num;
        }
        
        return answer;
    }
}

 

 

 

 

 

3. 해석

정수로만 이루어진 문자열을 받기 위해 매개변수 num_str을 사용한다.

answer을 정수형타입으로 선언 및 초기화를 해준다.

 

for문을 활용하여 num_str에 들어올 정수로 이루어진 문자열의 길이만큼 반복해준다.

num_str의 문자열을 substring 메서드를 이용해서 문자열을 잘라준다.

(num_str.substring(i , i+1)); 을 이용해서 인덱스 i부터 인덱스 i+1전 까지 잘라준다.

만약 num_str에 "123456789"라는 문자열이 들어온다면 

인덱스0 부터 인덱스 1 전 까지 잘라준다는 것이다.

그렇다면 반복문을 통해 제일 처음 잘리는 문자열은 "1"이 될 것이고 문자열을 숫자형으로 치환해야하기 때문에 Integer.parseInt를 사용해서 (num_str.substring(i, i+1));로 잘라온 문자열 "1"을 숫자형으로 치환해준다.

 

 그 후 answer += num;을 통해 잘라온 숫자 1을 answer에 더 해준다.

answer+= num 은 answer = num + answer과 같은 의미이다.

 

여기까지 되었다면 다시 for문으로 돌아가서 for (int = 1 ; i < num_str.length(); i++){ }의 조건으로 반복되기 시작한다.

이제는 num_str.substring(i ,i+1);이 인덱스 1부터 인덱스 2 전까지의 문자열을 잘라준다.
아까와 같은 예제로 "123456789"에서 인덱스 1부터 인덱스 2전 까지의 문자열인 "2"를 잘라오고, Integer.parseInt를 통해 숫자형 치환 후 num에 숫자 2를 넣어준다.

 

그 후 answer += num을 해주는데 answer에는 아까 answer에 더해뒀던 1이라는 숫자가 있기 때문에 

answer = num + answer이니까 answer = 2 + 1이 될 것 이고 answer = 3이 된다. 

 

이를 for문을 통해 " i가 num_str.length() 보다 작으면 반복한다 " 의 조건에 만족할 때 까지 반복한다면 

예제로 "123456789"를 입력하면 마지막 return answer; 에는 45라는 값이 반환된다.

 

 

 

4. 참고

 

문자열을 자르는 방법은 3가지가 있다. [ indexOf()  /  substring()  /  split() ]

  • indexOf()

해당 원소의 인덱스 값을 반환해주는 함수이다.

String num = "123-456";
String str = "abc-def";

int numIdx = num.indexOf("3");	// numIdx의 인덱스 값은 2
int strIdx = str.indexOf("-");	// strIdx의 인덱스 값은 3

인덱스 값은 첫 글자가 인덱스 0부터 시작한다.

만약 문자열 "123-456" 이 있다면 문자열과 인덱스 값은 아래와 같다.

인덱스
문자열 1 2 3 - 4 5 6
인덱스 값 0 1 2 3 4 5 6

 

 

  • substring()

substring(a,b)  :  a번째 인덱스부터 b번째 인덱스 전 까지 자르기

substring(x) : x 번째 인덱스부터 끝까지 자르기

String str = "abc-def";

String str1 = str.substring(0,3);	//인덱스 0부터 인덱스3 전까지 (0~2)니까  str1 = "abc"
String str2 = str.substring(3);		//인덱스 3부터 끝 까지 자르기니까 str2 = "-def";

 

  • split()

지정한 문자를 기준으로 문자열을 잘라서 배열로 반환하는 함수

 

String str = "abc-def";

String strSplit[] = str.split("-");	
// strSplit[0] = "abc";
// strSplit[1] = "def";

//===============================

String today = "2024-04-19";

String todayArr[] = today.split("-");

//todayArr[0] = "2024";
//todayArr[1] = "04";
//todayArr[2] = "19";

 

생각해두어야 하는 것은 split()메서드를 이용하면 배열로 반환된다는 것이다.