[Java] programmers lv 1. 자연수 뒤집어 배열로 만들기

Eunbi Lee·2023년 6월 3일
1

Algorithm

목록 보기
1/7
post-thumbnail

이코테로 유명한 [이것이 코딩테스트다]로 알고리즘 공부를 요즘 하고 있습니다 ✏️

그런데, 파이썬에서 자바로 전향한 지 얼마 안 된 시점이라 그런지 자바 문법에 익숙치 않았습니다.

ex. 자바에서 int를 String으로 바꾸는 메소드나 방법이 뭐가 있지? 😕

따라서 (1) 프로그래머스 1, 2, ..레벨 풀기 + (2) 벨로그에 고전했던 프로그래머스 문제 및 풀이 포스팅 하기 + (3) 자바 문법에 익숙해지기 순서로 진행해보겠습니다.

  • 우선, 제가 소개해드리는 풀이는 기초부터 차근차근 이해하기에 좋은 풀이 순으로 소개해드리려고 합니다. 즉, 초반엔 Stream과 같은 고급 풀이는 너무 간단한 풀이지만 이해에 어려움이 있을 수 있으므로 최대한 자바의 기본 문법 및 구조를 활용한 풀이들 위주로 설명드리겠습니다.

작심삼일이 되지 않도록 노력해볼게요 😃


자연수 뒤집어 배열로 만들기

문제 설명

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

제한 조건

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

입/출력 예

n = 12345 / return [5,4,3,2,1]

풀이 1

// n = 12345
class Solution {
	public int[] solution(long n) {
    
    	// ""(String) + int = String
        // String a = "12345"
    	String a = "" + n;
        
        // String a.length와 동일한 int array 생성
        // answer = [ , , , , ]
        int[] answer = new int[a.length()];
        int cnt = 0;
        
        while(n > 0) {
        	// n은 long 타입이므로 int 형 변환
            // n의 맨 오른쪽 자릿수를 저장
            // answer[0] = 5
        	answer[cnt] = (int)(n % 10);
            
            // n의 맨 오른쪽 자릿수를 제거
            // n = 1234
            n /= 10;
            System.out.println(n);
            cnt ++;
        }
        return answer;
    }
}

위 풀이의 핵심은 다음과 같습니다.
1) String("") + int = String (= String.valueOf())
2) int[] answer = new int[a.length()];
3) answer[cnt] = (int)(n % 10);
4) n /= 10;

풀이 2

// n = 12345
class Solution {
	public int[] solution(long n) {
    
    // n = "12345"
    String s = String.valueOf(n);
    StringBuilder sb = new StringBuilder(s);
    
    // n = "54321"
    sb = sb.reverse();
    
    // n = ["5", "4", "3", "2", "1"]
    String[] ss = sb.toString().split("");
    
    // answer = { , , , , }
    int[] answer = new int[ss.length];
    for (int i = 0; i < ss.length; i ++) {
    	// answer[0] = 5
    	answer[i] = Integer.parseInt(ss[i]);
    }
    return answer;
  }
}

위 풀이의 핵심은 다음과 같습니다.
1) String.valueOf();
2) StringBuilder sb = new StringBuilder();
3) sb.reverse();
4) String[] ss = sb.toString[].split("");
5) answer[i] = Integer.parseInt(ss[i]);

풀이 3

import java.util.*;

// n = 12345
class Solution {
	public static int[] solution(long n) {
    
    // n = "12345"
    String str = String.valueOf();
    
    // arr = ['1', '2', '3', '4', '5']
    char[] arr = str.toCharArray();
    
    // answer = { , , , , }
    int[] answer = new int[arr.length];
    
    for (int i = 0, j = arr.length - 1; i < arr.length && j >= 0; i ++, j --) {
    // answer[0] = 5
    answer[i] = Character.getNumericValue(arr[j]);
    }
    return answer;
  }
}

위 풀이의 핵심은 다음과 같습니다.
int → String → char array → int array

1) String.valueOf();
2) str.toCharArray();
3) for (int i = 0, j = arr.lengh - 1; i < arr.length && j >= 0; i ++, j --)
4) answer[i] = Character.getNumericValue();

풀이 3은 참고로 제가 풀이한 풀이이니, 더 자세한 설명이 보고 싶으시다면 아래의 링크를 통해 확인하세요


자연수 뒤집어 배열로 만들기와 같은 문제는 필수 개념이니 알아두는 게 좋을 것 같습니다 🍰

profile
B - B = 이은비

0개의 댓글