🔥문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42746
🔥1 TRY ( 실패 )
아래 코드는 첫번째로 작성한 코드 였다.
convert 함수를 이용해서 기존 numbers의 원소를 변형한 뒤 그 값을 기준으로 sorting 하는 방법으로 풀이를 진행했다.
하지만 convert 함수 내부에 return 하는 수식이 잘 못 되었다. 예를들어 [ 3, 344 ] 가 있을 경우 이는 convert를 통해 [ 3999, 3449 ] 로 취급되어 이 수의 크기를 비교하여 answer을 완성 하면 3344가 되고 이는 올바른 답 3443과 일치 하지 않는다. 그리하겨 return 하는 함수를 바꾸게 되는데 ...
function solution(numbers) {
const convert = (n)=>{
if(n===1000){ return n }
if(n>=100){ return n*10 + 9}
if(n>=10){ return n*100 + 99}
return n*1000+999
}
const sorted = numbers.sort((a,b)=>{
const [convertedA,convertedB] = [convert(a),convert(b)]
return convertedB - convertedA
})
return sorted.reduce((acc,cur)=>{ return acc+=String(cur) },'');
}
🔥2 TRY ( 성공 )
1 TRY 때와 변경된 점은 convet 내부의 return 되는 수식과 마지막에 '0000' 과 같은 실제로 존재하지 않는 수가 문자열로 출력됨을 방지하는 부분이다. ( Number(answer) !==0? answer : '0' )
변경된 convert함 수를 이용하면 [3, 344] 를 [3333, 3443] 로 변형하여 각 값을 비교하여 큰 수가 먼저 앞으로 온다.
그리하여 출력되는 값은 아까와 다르게 올바르게 3443 이 출력된다. 😊
function solution(numbers) {
const convert = (n)=>{
if(n===1000){ return n }
if(n>=100){ return n*10 + parseInt(n/100)}
if(n>=10){ return n*100 + n }
return n*1000+ n*100 + n*10 + n
}
const sorted = numbers.sort((a,b)=>{
const [convertedA,convertedB] = [convert(a),convert(b)]
return convertedB - convertedA
})
let answer = sorted.reduce((acc,cur)=>{ return acc+=String(cur) },'');
return Number(answer)!==0 ? answer : '0'
}
'Javascript' 카테고리의 다른 글
프로그래머스[JS] > 택배상자 (0) | 2024.06.29 |
---|---|
프로그래머스 > 성격 유형 검사하기 (0) | 2024.06.02 |
[JS] base64 img data를 img File 형태로 변경하기 (0) | 2024.05.18 |
[JS] 미리보기 이미지 구현하기 ( FileReader, FileReader.readAsDataURL() 이용 ) (0) | 2024.05.15 |
예외 처리 방법 ( throw, Error 이용 ) (0) | 2023.11.30 |