function solution(n) {
var answer = 0;
let leng = n.toString();
let i = 0;
let tmp = 0;
for (i = 0; i < leng - 1 ; i++) {
if (Number(leng[i]) > Number(leng[i+1])) {
tmp = leng[i+1];
leng[i+1] = leng[i];
leng[i] = tmp;
console.log (n + ' : n값')
console.log (leng[i] + ' : leng[i]값')
console.log (leng + ' : leng값')
}
answer = leng;
}
return answer;
}
이건 실패! 여기에 쓰는 방법이 아니다
시도중인데 쉽지 않다. 일단 숫자 낱개 배열로 나오고, 숫자의 순서가 이상하다. 827311이 나온다.
function solution(n) {
var answer = 0;
let leng = n.toString();
let i = 0;
let tmp = 0;
let arr = [];
let quote = 0;
for (i = leng.length-1 ; i >= 0 ; i--) {
quote = n / (10 ** i);
n = n % (10 ** i);
arr[i] = Math.floor(quote);
if(arr[i] < arr[i+1]) {
tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
console.log(arr)
}
return answer;
}
- 이런 경우는 대부분 arr.sort()를 쓴다.
- split이나 join같은걸 써서 배열을 뜯거나 붙여보자.
- join을 쓰면 하나의 배열로 붙여버릴 수 있다.
function solution(n) {
var answer = 0;
let str = n.toString();
let arr = [];
let i = 0;
for (i = 0; i < str.length ; i++)
{ arr[i] = str[i]
arr.sort(function(a, b) { //내림차순 배열
if (a < b) return 1;
if (a == b) return 0;
if (a > b) return -1;
});
}
answer = Number(arr.join(''));
return answer;
}
function solution(x) {
var answer = true;
let str = x.toString();
let i = 0;
let quote = 0;
let sum = 0;
for (i = str.length - 1 ; i >= 0 ; i--) {
quote = Math.floor(x / (10 ** i));
x %= (10 ** i);
sum += quote;
}
if (Number(str) % sum == 0) {
// 이때 x % sum == 0 으로 쓸 경우 모두 true가 된다 - 위에서 x %= (10 ** i)를 써서 x값이 변했기 때문
// 그래서 처음 x값을 가지고 있는 스트링인 str에서 숫자를 뽑는 식으로 처음 수를 추출
answer = true
} else
answer = false;
return answer;
}
정답은 이렇게 써서 냈지만, 뭔가 다른 형태는 없는지 고민이 되었다. 엑셀처럼 삼항연산자 중첩은 안되나?🤔
function solution(a, b) {
var answer = 0;
let i = 0;
let sum = 0;
if( a > b ) {
for (i = b; i <= a ; i++) { sum += i; }
answer = sum;
return answer;
}
else if ( a < b ) {
for (i = a; i <= b; i++) { sum += i; }
answer = sum;
return answer;
}
else (a == b)
answer = a;
return answer;
return answer;
}
내 코드는 왜인지 작동을 하지 않았다. Math.abs에 성공하고 싶다!
삼항연산자의 중첩을 이래저래 찾아봤지만 참거짓 형태가 아니면 안되나보다!
구글링을 해봐도 삼항연산자 내에 for문을 넣는 형태는 없었다. 으하하하 몰루몰루
function solution(a, b) {
var answer = 0;
let i = 0;
let sum = 0;
answer = (a < b) ? (a > b) ? {for(i = a ; i < b ; i++) { answer += i; return answer} : for (i = b; i < a; i++) {answer += i; return answer } : a;
return answer;
}
무엇이 틀렸는지 짚어보도록 하자. 이것은 틀린코드!
function solution(num) {
var answer = 0;
let i = 0;
for (i = 0; i <= 500 ; i++ ) {
//여기서의 i는 인덱스가 아니라 횟수로 쓸거였으니 1부터 했어야 한다
if (num == 1) {
break;
answer = i;
return answer;
}
// 위의 if문 대체 어디에 어떻게 써야할지 모르겠어서 항해때 쓴 JAVA 코드를 참고했다..ㅎ..
if (num % 2 == 0) {
num /= 2;
} else if (num % 2 != 0) {
num *= 3 + 1;
// 이렇게 쓰면 식이 num = (num * 3) + 1 이 아니라 * 4로 인식한다!
//하도 이상해서 console.log 찍어봤더니 num이 12가 찍히는걸 보고 깨달았다...
}
answer = i;
}
if (i > 500) {
answer = -1
}
return answer;
}
이것은 정답코드!
function solution(num) {
var answer = 0;
let i = 0;
for (i = 1; i <= 500 ; i++ ) {
if (num == 1) {
break;
answer = i;
return answer;
}
if (num % 2 == 0) {
num /= 2;
} else {
num = num*3 + 1;
}
answer = i;
}
if (i > 500) {
answer = -1
}
return answer;
}