일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 개발자부트캠프
- Algorithm
- 프로젝트캠프
- 해시
- 타입스크립트
- 알고리즘
- react-query
- 자바스크립트
- 프로세스
- javascript
- 네트워크
- 메모리
- cs #네트워크
- typescript
- html
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- CS
- 스레드
- 웅진씽크빅
- React.js
- 인사이드아웃
- 리액트
- ip
- IT개발캠프
- 스나이퍼팩토리
- 유데미
- react
- App Runner
- BFS
- 프로그래머스
- Today
- Total
Bin's Blog
[프로그래머스] Level2 - 가장 큰 수(Javascript) 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▶ 문제 요약
1. 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
2. [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]을 만들 수 있고, 이중 가장 큰 수는 6210이다.
3. 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return하도록 작성
▶ 코드
function solution(numbers) {
// 내림차순 정렬 후 문자열로 변환
let answer = numbers.sort((a, b) =>
`${b}${a}` - `${a}${b}`).join("");
// 입력 배열이 다 0인 경우 0을 return
return answer[0] === "0" ? "0" : answer;
}
▶ 풀이 과정
1. sort()메서드를 활용해서 정렬을 하는데 가장 큰 수를 정렬해야하므로 내림차순 정렬을 한다. 오름차순은 a-b이고 내림차순은 b-a이다.
예를 들어 [6, 10, 2]가 있다고 하자. 정렬을 할 때 템플릿 리터럴을 사용해서 두 비교값을 하나의 문자열처럼 합쳤다.
처음에 6과 10을 비교하면 a = 6, b = 10이다. 그래서 106 - 610이 되는데 이러면 음수가 나온다. 근데 내림차순 특성상 양수가 나와야 정렬이 이루어진다. 따라서 배열의 상태가 유지된다.
그리고 다음 값인 10과 2를 비교하면 a = 10, b = 2 그래서 210 - 102가 되면서 양수가 된다. 양수가 나왔으므로 정렬이 이루어져서 10과 2의 자리가 교체된다. 따라서 [6, 2, 10]이 되고 그것을 문자열로 바꿔야 하므로 join() 메서드를 활용했다.
2. answer[0]이라는 조건은 첫 번째 문자가 0이면 정렬된 배열의 모든 요소가 0이라는 의미 즉 이 말은 내림차순을 했음에도 가장 앞자리의 수가 0이라는 의미는 0보다 큰 수가 뒤에 없다는 의미가 성립되므로 이럴땐 문자열 0을 return하고 그게 아니면 위에서 정렬한 문자열을 return한다.
▶ 배운점
1. 문자열을 비교할 때 템플릿 리터럴을 적극적으로 활용하자. 매우 유용하다. 특히 가장 큰 수를 만드는 경우에는 정렬할 때 템플릿 리터럴을 사용하면 좋다.
2. 입력값이 0인 경우가 나올 수 있으므로 항상 예외 케이스를 고려해야한다.
'Algorithm' 카테고리의 다른 글
[프로그래머스] Level2 - 롤케이크 자르기(Javascript) (0) | 2023.05.02 |
---|---|
[프로그래머스] Level2 - 다리를 지나는 트럭(Javascript) (0) | 2023.04.29 |
[프로그래머스] Level2 - 2개 이하로 다른 비트(Javascript) (0) | 2023.04.27 |
[프로그래머스] Level2 - 숫자 변환하기(Javascript) (0) | 2023.04.26 |
[프로그래머스] Level2 - 뒤에 있는 큰 수 찾기(Javascript) (0) | 2023.04.25 |