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()메서드를 이용하면 배열로 반환된다는 것이다.
'Programers코테연습(Java)' 카테고리의 다른 글
[Programmers TIL 3일차] 문자열 정렬하기(1) (0) | 2024.04.21 |
---|---|
[Programmers TIL 3일차] 옷 가게 할인받기 (0) | 2024.04.21 |
[Programmers TIL 2일차] 달리기 경주 (0) | 2024.04.20 |
[Programmers TIL 2일차] 가채점 (0) | 2024.04.20 |
[Programmers TIL 1일차] 붕대 감기 (0) | 2024.04.19 |