n개의 수를 오름차순으로 정렬 하시오
풀이방법❓
array.sort()가 생각나고, 뿌려주면 될것 같다.
문제점
1. Array.sort()로는 시간 초과가 발생.
2. 차선책인 collection.sort()를 사용했더니 다시 또 시간초과가 발생.
해결책
1-2 Arraylist로 데이터를 집어넣어 collection.sort();를 사용할 수 있게 한다.
3 출력을 위한 Stringbuilder 사용.
Stringbuilder역활 , 메모리 사용을 줄이는 방법?
// 0<=n <=99 일때 정수
// 10보다 작다면 앞에 0
// 각자리 숫자를 더함.
// 그러고 앞의 1의 자리수와
// 뒤의 1의 자리 수를 더함
ex) 26=> 2 + 6 = 8 => 68
풀이방법❓
자릿수 별로 잘라서 일의 자리 수와 결과 값 끼리 a+b = ab
느낌으로 만들고 이걸 while문으로 돌리자.
위에 생각한 것처럼 일의 자리 와 결과값 일의자리를 더해주는 로직을 생각했다.
해결책
1. 몫과 나머지를 더한것에 나머지가 1의 자리라는 생각을 하는게 오래걸렸다.
2. 같은 수가 나올때까지 카운트한다.
다른 풀이 방법은 없을까?, 자릿수를 구하는 다른 방법은?
분해합은 자 자리수들의합 + 생성자 이겠구나? 하고 생각을 했다.
예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.
따라서 245는 256의 생성자가 된다.
여기서 전체 sum의 합 이라고 생각 못하고 삽질을 한다...
1부터 숫자를 반복해서 계속 증가해서
그 숫자를 하나의 정수 형태로 변환해서 전체 sum으로 합을 구해서
if(sum == N)의 조건을 걸어준다.
N의 숫자와 일치한다면 생성자를 찾았다는 걸 의미하니까 반복문을 마치면된다.
구글링해서 어떻게 풀었는지 참고해봤다.
생각보다 더 짧아서 짜증이났다.
풀이방법❓
해결책
1. 정수 i를 String temp로 받아서 자릿수만큼 charAt()으로 쪼개서 sum
+ temp를 정수로 변환한 값을 더한다.
2. 전체 sum으로 합을 구해서 (sum == N)이면 break;
만약에 값이 없다면 (i == N)으로 정수 i 와 값이 같을테니 0 출력