안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)
🪅 나의 문제 풀이
class Solution {
public int solution(int n) {
int answer = 0;
// 정수 n을 문자열로 변환
String str = Integer.toString(n);
// 반복문으로 나온 결과값 char 배열에 담아주기
// char[] charArray = str.toCharArray();
for(int i = 0; i<str.length(); i++){
// 문자를 정수로 변환 (Character.getNumericValue())
// int result = Character.getNumericValue(i);
answer += Integer.parseInt(str.substring(i, i+1));
}
return answer;
}
}
[테스트 통과]
class Solution {
public int solution(int n) {
int answer = 0;
// 정수 n을 문자열로 변환
String str = Integer.toString(n);
for(int i = 0; i<str.length(); i++){
answer += Integer.parseInt(str.substring(i, i+1));
}
return answer;
}
}
[해결 방안]
char[] charArray = str.toCharArray(); 문자열을 문자 단위로 분할하여 배열에 저장합니다. charArray배열의 길이만큼 반복문을 돌려 그 결과값을 Character.getNumericValue();메소드로 문자를 정수로 변환하여, 모든 숫자를 더하려고 했으나 테스트1, 2 모두 원하는 값과는 다른 값이 나왔습니다. 정수를 문자열로 변환하는 과정은 맞았지만 for문의 처리후 결과를 도출하는 과정의 내용에 수정할 필요가 있었습니다.
🧸 코드설명
Integer.toString()메소드를 사용하여 정수 n을 문자열로 변환하여 str에 저장합니다. for문을 통해 str의 길이만큼 반복문을 수행합니다. 반복문 내에서 substring() 메소드를 이용하여 str의 현재 자리의 문자를 추출합니다. (startIndex: i, endIndex: i+1) endIndex는 해당 i를 불포함하므로 마지막 인덱스까지 포함하고자 한다면 i+1을 해주어야 합니다. 반복문을 통해 각 자리의 숫자를 더하는 과정이 실행됩니다. 결과값을 int로 형변환해주고 answer에 담아 answer을 리턴합니다. n이 '1234'라면 먼저 1을 넣어 answer은 1이 됩니다. 그리고 2를 넣으면 answer은 3이 됩니다. 3을 넣으면 answer은 6이 됩니다. 4를 넣으면 answer은 10이 됩니다.
✨ 다른 풀이
풀이1)
n이 0보다 큰 숫자인 경우 while반복문을 진행합니다.
풀이2)
char배열로 하지 않았다면 저도 처음엔 이렇게 식을 만들려고 했었어요. 괜히 어렵게 돌아간거 같은 기분도 드네요 ㅠㅠ
String배열 arr에 정수 n을 String으로 바꿔 저정한 str을 split("")으로 하나씩 잘라내어 담아줍니다.
for문을 arr의 배열 길이만큼 반복문을 돌려 결과값을 int형변환을 해준 뒤 answer에 담아 리턴합니다.
배열에 한 번에 담아주는 방법은 한 줄의 코드를 줄여주는 체이닝 기법의 활용성을 보여주네요.ㅎㅎ
풀이3)
Arrays클래스를 import해줍니다. n을 String으로 valueOf()메소드를 이용하여 변환시켜준 후, split("")으로 자른 Arrays 배열을 stream으로 만들어줍니다. mapToInt는 스트림을 IntStream으로 변환해주는 메서드입니다. Arrays 배열 stream을 int형변환을 시켜준 뒤, sum()메소드로 요소들의 총합을 구합니다.
+ 배열을 소스로 하는 스트림을 생성하는 메서드는 Stream과 Arrays에 static 으로 정의되어 있습니다.
stream을 자주 보았는데 구글링하다보니 of(), stream() 둘다 스트림을 생성하더라구요. 둘이 무슨차이지..? 생각해보며 찾아보니 Stream에 직접 접근은 of()로 접근, Arrays로 접근할 때는 stream()을 이용합니다.
+ 참고 사이트
'。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★ > 나의 코딩테스트' 카테고리의 다른 글
[프로그래머스/Java] 코딩테스트 Lv.0 아이스 아메리카노 (0) | 2023.10.10 |
---|---|
[프로그래머스/Java] 코딩테스트 Lv.0 특정 문자 제거하기 (0) | 2023.10.07 |
[프로그래머스/Java] 코딩테스트 Lv.0 최댓값 만들기(1) (0) | 2023.10.03 |
[프로그래머스/Java] 코딩테스트 Lv.0 짝수는 싫어요 (0) | 2023.10.01 |
[프로그래머스/Java] 코딩테스트 Lv.0 최빈값 구하기 (0) | 2023.09.30 |