<풀기 전 생각>
들어오는 n이 long 타입 이어서 인지 바로 정수 연산이 되지 않아서 문자열 배열로서 처리를 해야 한다는 생각을 했고
만약 10000 을 뒤집었을 때 값이 00001이 되는 것을 방지 해야 한다는 생각을 가지고 문제 풀이에 들어갔다.
+ArrayList<Integer> 를 int[] 로 바꾸기
<중간 문제점>
5, 7 번 test에서 실패가 나왔다.
import java.util.ArrayList;
class Solution {
public int[] solution(long n) {
int[] answer = {};
ArrayList<Integer> ans = new ArrayList<>();
String num = String.valueOf(n);
char array[] = num.toCharArray();
for(int i=array.length-1;i>=0;i--){
if(ans.size()==0&&array[i]=='0')
continue;
else
ans.add(Integer.parseInt(array[i]+""));
}
answer = new int[ans.size()];
for(int i=0;i<answer.length;i++)
answer[i] = ans.get(i);
System.out.println("kest");
return answer;
}
}
왜 그런가 시도해본 결과 "만약 10000 을 뒤집었을 때 값이 00001이 되는 것을 방지 해야 한다." 이부분이 필요가 없는 조건 이었기 때문에 실패 한 거였다. 10000 -> 00001 으로 배열이 반환되는게 맞았다.
그리고 생각해보면 ArrayList를 쓸 필요 없이 그냥 일반 배열을 사용해도 되는 상황이 된다.
<최종 코드>
class Solution {
// 시간 복잡도 O(n) 공간 복잡도 O(n)
public int[] solution(long n) {
String num = String.valueOf(n);
char array[] = num.toCharArray();
int[] answer = new int[array.length];
int index=0;
for(int i=array.length-1;i>=0;i--){
answer[index++]=Integer.parseInt(array[i]+"");
}
System.out.println("kest");
return answer;
}
}
<메모>
처음에는 long 타입이면 정수 연산이 불가능 할 줄 알았는데 우수 풀이를 보니
단순히 (int) 형으로 타입 캐스팅을 할 경우 정수 연산 %, / 등이 가능했다.
class Solution2{
// 시간 복잡도 O(n) 공간 복잡도 O(n)
public int[] solution(long n){
String a = ""+n;
int answer[] = new int[a.length()];
int index = 0;
while(n>0){
answer[index++] = (int)(n%10);
n/=10;
}
return answer;
}
}
'PS > Level1' 카테고리의 다른 글
대충 만든 자판 (0) | 2023.02.26 |
---|---|
둘만의 암호 (0) | 2023.02.19 |
크레인 인형뽑기 게임 (0) | 2023.02.06 |
로또의 최고 순위와 최저 순위 (3) | 2023.02.04 |
[1차] 다트 게임 (0) | 2023.02.02 |