1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에 그 뒤에 모든 숫자를 더한 값을 출력한다.
- 주어진 자료는 무엇인가?
- 알파벳 대문자와 숫자(0~9)로만 구성된 문자열
2. 계획
- 주어진 문자열을 쪼개서 배열로 만든다.
- 배열을 순회하면서 문자열과 숫자를 나눈다.
- 문자열을 오른차순으로 정렬한다.
- 숫자를 더한다
- 이 둘의 값을 이어서 출력한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (S) => {
// 주어진 문자열을 쪼개서 배열로 만든다.
const s = S.split('');
// 배열을 순회하면서 문자열과 숫자를 나눈다.
let str = [];
let num = [];
s.map((it) => {
if (isNaN(it)) {
return str.push(it)
} else {
return num.push(it)
}
})
// 문자열을 오른차순으로 정렬한다.
const sortStr = str.sort().join('');
// 숫자를 더한다
const sumNumber = num.map((it) => Number(it)).reduce((acc, cur) => acc + cur)
// 이 둘의 값을 이어서 출력한다.
return sortStr + sumNumber
}
test('sortString', () => {
expect(solution('K1KA5CB7')).toEqual('ABCKK13');
expect(solution('AJKDLSI412K4JSJ9D')).toEqual('ADDIJJJKKLSS20')
})
4. 반성
- 문자열도 배열처럼 인덱스를 사용할 수 있다는게 생각이 났다. 그래서 주어진 문자열을 쪼개지 않고 바로 for반복문을 사용할 수 있을 것 같다.
const solution = (S) => {
// 배열을 순회하면서 문자열과 숫자를 나눈다.
let str = [];
let num = [];
for (i = 0; i < S.length; i++) {
if (isNaN(S[i])) {
str.push(S[i])
} else {
num.push(S[i])
}
}
// 문자열을 오른차순으로 정렬한다.
const sortStr = str.sort().join('');
// 숫자를 더한다
const sumNumber = num.map((it) => Number(it)).reduce((acc, cur) => acc + cur)
// 이 둘의 값을 이어서 출력한다.
return sortStr + sumNumber
}
- 숫자인지 문자열인지 판별하는 방법도 typeof를 사용해서 해결할 수도 있을 것 같다.
댓글