프로그래머스>자릿수 더하기(java)

카초·2023년 9월 11일

//개인 공부 기록용

프로그래머스 > Lv.1 > 코딩테스트 연습 > 연습문제 > 자릿수 더하기

-문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

-제한사항
N의 범위 : 100,000,000 이하의 자연수

-입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

[코드1] > RC (Reference Code): 남의 코드를 참고하여 해결한 경우

import java.util.*;
public class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = String.valueOf(n);
        for(int i=0; i<str.length(); i++) {
            int intchar = Integer.parseInt(String.valueOf(str.charAt(i)));
            answer+=intchar;
        }
        return answer;
    }
}

정수를 문자로 변환한 뒤 다시 정수로 바꿔 각각 더해야겠다고 생각했다.
처음엔 split을 사용해서 짜야겠다는 생각이 들었었다. (문자열 쪼개기)
하지만 이 코드는 charAt()으로 문자열에 순서를 부여해 가져다 썼다.
한편, 정수=>문자열=>정수 방식 말고 나눗셈을 이용하는 방식도 있다.

  1. String.valueOf()란?
    => ( ) 안에 든 것을 "문자열"로 바꿔줌.

    1-1. toString()와 차이
    ? toString()도 문자열로 바꾸지 않았었나?
    => toString()은 오버라이딩과 관련된 개념임.
    모든 객체가 상속받는 메서드로서 객체의 내용을 문자열로 표현하는 역할.
    ex) "MyClass{" + "value=" + value + '}';

  2. Integer.parseInt()란?
    => ( ) 안에 "문자열"을 입력받아 정수로 바꿔줌.

    2-1. 왜 Integer.parseInt(str.charAt(i));이 아니라 Integer.parseInt(String.valueOf(str.charAt(i)));를 쓰는가?
    => chatAt()은 문자열이 아닌 문자를 반환하기 때문임. 그래서 문자열로 바꿔줘야 함.

[코드2]

public class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = String.valueOf(n);
        
        String[] digits = str.split("");
        
        for (String digit : digits) {
            answer += Integer.parseInt(digit);
        }
        
        return answer;
    }
}

split을 사용하여 문자열을 쪼개서 정수화한 후 더했다.

  1. for ( : ) 형식이란
    => for-each 루프는 배열 또는 컬렉션에 있는 요소의 수에 따라 자동으로 반복하기에 반복 횟수를 설정할 필요가 없음. 문자열 배열에 존재하는 요소 digits가 순서대로 digit에 저장된 후 정수화되어 합해진다.

[코드2-1]

import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = String.valueOf(n);
        
        String[] digits = str.split("");
        
        for(int i=0; i < digits.length; i++) {
            answer += Integer.parseInt(digits[i]);
        }

split을 사용하되 for-each가 아닌, 배열 길이에 따라 순서대로 더하는 방식을 택했다.

  1. digits.length와 digits.length() 차이
    =>
    digits.length: 배열의 길이를 나타내는 속성임. 배열의 경우, .length는 배열에 포함된 요소의 개수를 나타냄. 정수 배열, 문자 배열 다. ex) {'s','e','r'} 이 배열의 길이(개수) 셀 때.
    digits.length(): '문자열'의 길이
  2. size와 length 차이
    =>
    배열{} 1개에서는 .length 속성을 사용하고,
    리스트나 컬렉션에서는 .size() 메소드를 사용함
    size()는 arraylist와 같이 쓰임. "여러" 리스트인 거임.

0개의 댓글