문제 접근
public class Q23 {
public int[] solutionQ23(long n) {
// 즉 n== 5라고 생각하고 코드 작성
long examp_long = n;
// int 배열로 받기위해 long에서 int로 형변환
int example_int = (int) examp_long;
// Long을 int[]로 담기위해서 형변환한 example_int를
// 배열의 크기로 입력함.
int[] answer = new int[example_int];
//
// 길이 만큼 반복문을 실행햐서 answer에 대입.
for(int i = 0; i<example_int; i++){
answer[i] = example_int -i;
}
return answer;
}
}
출력은 [5,4,3,2,1]로 잘 출력됬는데 프로그레머스에서는 광탈했다.
문제 재접근
문제 해결 접근
// int 배열로 받기위해 long에서 int로 형변환
String example_str = String.valueOf(n);
// 문자열 길이를 str_leng로 선언함
int str_leng = example_str.length();
// 위와 마찬가지로 길이만큼 int[] 크기를 선언함.
int[] answer = new int[str_leng];
// 문자열 길이가 옳바르게 나오는 지 확인.
//System.out.println(example_str.length());
// 맨 뒤부터 역순으로 출력하게끔 반복문을 실행.
// 초기값이 5이면 인덱스는 4까지 이기에 초기값을 -1 만큼 선언함. 항상 조심하기.
for(int i = str_leng-1; i>=0; i--){
// charAt으로 문자를 나눠서 출력 해봄.
// [1,2,3,4,5]가 출력됨.
// System.out.println(example_str.charAt(i));
// chart -> String --> int로 형변환 시도
// 정상 출력됨 [1,2,3,4,5]
//System.out.println(Integer.parseInt(String.valueOf(example_str.charAt(i))));
// chart -> String --> int로 형변환한 출력을 보고 반대로 출력
//12345이면 초기값이 4고 i = 4일때 charAt[0](==1)이 되니까
// answer[4] == 1이됨. answer[3] == 2 answer[2] == 3 answer[1] == 4 answer[0] == 5가됨.
// 따라서 answer[5]의 배열안은
// 인덱스가 answer[0]부터 [4]까지 순서대로 [5,4,3,2,1]이 들어갈 것임.
answer[i] = Integer.parseInt(String.valueOf(example_str.charAt(str_leng-1 - i)));
}
return answer;
결과는 통과했다.
일단 스스로 로직을 생각하고 알고리즘을 이해하는것도 중요하지만 문제를 정확히 이해하는 것 또한 중요하다는 것을 다시한번 깨닫게 되었다.
내가 문제를 어떻게 접근하느냐에 따라서 해결할 수 있다는 것을 느끼게 되어서 뿌듯한것 같았다.(효율적인 코드를 작성해야 된다는 부담감도 느낀다.)
참고로 이 문제를 1줄로 해결한 코드를 보았는데 정말 겸손해져야 겠다는 것을 느겼다. 바로 아래에 소개하겠다.
class Solution {
public int[] solution(long n) {
return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
}
}