알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://programmers.co.kr/learn/courses/30/lessons/12932
코딩테스트 연습 - 자연수 뒤집어 배열로 만들기
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345
programmers.co.kr

Think🤔
12345를 넣으면 그대로 뒤집어서 마지막 부터 넣어주는 것
Long 값으로 n을 받는다
그럼 이것을 스트링으로 바꿔서 뒤집은 다음 다시 long형태로 바꿔줄 수 있다.
split로 쪼개서 String배열을 만들어서 넣어줄 수 있다.
long의 값을 이용해서 일의 자리를(제일 오른쪽값) 바로 int[]에 넣을 수 있다.
Solution✍
import java.util.Arrays;
class Solution {
public int[] solution(long n) {
String tmp = Long.toString(n);
int[] answer = new int[tmp.length()];
int count=0;
for(int i=tmp.length()-1; i>=0; i--){
answer[count] = Character.getNumericValue(tmp.charAt(i));
count++;
}
return answer;
}
}
1. 롱 타입의 n을 String 타입으로 바꿔준다.
2. 반환하기 위한 answer을 tmp의 글자수와 똑같이 만든다.
3. 마지막에 있는 charAt을 int형으로 바꾼다.
Character.getNumericValue(tmp.charAt(i));
- 숫자형태의 char을 int형으로 반환 시키는 메서드이다.
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int[] solution(long n) {
String s = String.valueOf(n);
StringBuilder sb = new StringBuilder(s);
// sb 거꾸로
// sb = sb.reverse();
sb.reverse();
int[] answer = new int[sb.length()];
String[] sbStr = sb.toString().split("");
for(int i=0; i<sb.length(); i++){
answer[i] = Integer.parseInt(sbStr[i]);
}
return answer;
}
}
1. s(String) 에 n(문자열로 치환)을 넣는다.
2. StringBuilder(싱글 스레드에 사용 지금 메인 하나이니 싱글 스레드임) 객체 생성
3. reverse() 메소드를 이용해 sb문자열 거꾸로
4. 정수 배열 answer 생성 sb 글자수 만큼
5. sbStr(String[]) sb를 쪼개서 배열에 넣어줌
6. 쪼갠 String값 int형으로 바꿔서 answer에 담아서 넣어줌
String[] split(String regex)
- split 함수는 입력받은 정규 표현식 또는 특정 문자를 기준으로 문자열을 나누어 배열(Array)에 저장 하는 것
전화번호 예제
String str = "010-1234-5678";
String[] phone = str.split("-");
하면 String phone에는 ["010","1234","5678"] 이 들어가게 된다.
class Solution {
public int[] solution(long n) {
String tmp = n+"";
int[] answer = new int[tmp.length()];
int count = 0;
while(n > 0){
answer[count] = (int)(n % 10);
n = n / 10;
count++;
}
return answer;
}
}
1. 문자열 추가로 String형으로 변환
2. answer 배열 길이 String 길이
3. while문을 이용해 나머지 값 넣어주기
4. 10으로 나누면서 끝 자릿수 출력
(int)n % 10
을 헀는데 실패가 한 3개 나왔던 것 같다.
- n은 10,000,000,000이하인 자연수입니다.
라는 조건 때문에 아마도 n의 값이 int형 범위에서 벗어난 것 아닐까? 근데 10으로 나누면 제일 큰값이 들어와도 나뉘면 값이 맞게 들어간다.

반례를 찾아야 증명이 가능하다.
먼저 (int)n이 시작되면 10,000,000,000 값이 들어와있을때 int 범위인 2,147,483,647이 되어버리고 거기서 % 10을 하기 때문에 값이 다르게 나온다.!!
Review🤩
다양한 방법으로 풀어보았고, int 와 long의 차이점 값의 범위에 대해서 알게 되었고,
StringBuilder에 대해서 다시 복습했다.
그리고 몰랐던 숫자형태의 char를 int형으로 반환 시키는 메서드도 알게 되었고, 또 split에 대해서 복습했다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 핸드폰 번호 가리기 (0) | 2021.12.02 |
---|---|
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2021.12.02 |
[프로그래머스] 제일 작은 수 제거하기 (0) | 2021.12.01 |
[프로그래머스] 직사각형 별찍기 (0) | 2021.12.01 |
[프로그래머스] 평균구하기 (0) | 2021.12.01 |