자바 자료구조#05. List 연습문제_자연수 뒤집어 배열로 만들기

A Kind Dev·2022년 8월 24일
0

자바 자료구조

목록 보기
7/20

문제 설명

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

나의 풀이

import java.lang.StringBuilder;
import java.lang.String;
import java.lang.Character;

class Solution {
    public int[] solution(long n) {
        
        // 1. 숫자를 String으로 변경
        String str = String.valueOf(n);
        StringBuilder sb = new StringBuilder(str);
        sb.reverse();
        
        // 2. String 길이만큼 배열 선언
        int[] answer = new int[sb.length()];
        
        // 3. String 을 int 값으로 형변환하여 배열에 저장
        for (int i = 0; i < sb.length(); i++) {
            answer[i] = Character.getNumericValue(sb.charAt(i));
        }
        
        return answer;
    }
}

StringBuilder.reverse();

문자열을 간단히 뒤집는 방법. StringBuilder의 reverse() 메서드를 사용한다.
String 클래스에는 reverse() 메서드가 없기 때문에 문자열을 사용하여 StringBuilder 객체를 생성한 후 reverse() 메서드를 사용해야 한다.

Character.getNumericValue(char);

숫자 형태의 char 를 int 로 형변환한다.
char를 int로 바로 형변환하면 아스키코드 표에서 char 에 대응하는 int 값으로 변환되기 때문에 값이 달라진다.
따라서 형변환 후 -48을 해주어야 원하는 값을 도출할 수 있었는데, 이러한 번거로운 과정을 생략하고 형변환만 원할 시 에 사용할 수 있는 API이다.

char c = '1';

// 바로 캐스팅
int result1 = (int) c; // 1 이 아닌 49 return

// Character.getNumericValue(char) 사용
int result2 = Character.getNumericValue(c);	// 1 return

강의 풀이

import java.util.*;

class Solution {
    public int[] solution(long n) {
        
        // 1. 입력되는 숫자의 길이를 알 수 없으므로 List 선언
        List<Integer> list = new LinkedList<>();
        
        // 2. List에 값 셋팅
        while (n > 0) {
        	// 10으로 나눈 나머지를 구하면 마지막 자리의 숫자가 도출됨
        	list.add((int)(n % 10));
            // 한 자리씩 줄여나가기
        	n /= 10;
        }
        
        // 3. List를 배열로 변환
        int answer[] = list.stream.mapToInt(Integer::intValue).toArray();
        
        return answer;
    }
}

출처 : 프로그래머스 스쿨 "[JAVA] 어서와! 자료구조 알고리즘은 처음이지?"

profile
친절한 개발자

0개의 댓글