티스토리 뷰
문제 : programmers.co.kr/learn/courses/30/lessons/42746
아이디어
서로 이어 붙였을 때 더 큰 수를 만들기 위해 다음과 같은 방법을 사용하였다.
문제에서 주어진 조건에 의해 배열의 각 원소는 [0, 1000]의 범위를 가지므로, 각각의 원소가 모두 네 자릿수가 되도록 반복해서 이어붙여준 reformattedValue를 만들었고, 이를 기준으로 주어진 배열을 내림차순 정렬하였다.
그러면 새로 내림차순으로 정렬된 배열을 순회하며 기존 원소값을 이어붙여주는 것으로 끝.
단, 문제에서 요구하는 결과값이 숫자이기 때문에(String은 overflow발생을 방지하기 위한 목적일 뿐) 주어진 배열이 {0, 0, 0, 0}과 같은 형태라면 결과값으로 "0000"이 아닌 "0"이 반환되어야 한다.
소스코드
import java.util.Arrays;
public class Solution {
public String solution(int[] numbers) {
Data[] data = new Data[numbers.length];
for (int i = 0; i < numbers.length; i++) {
data[i] = new Data(numbers[i]);
}
Arrays.sort(data);
if (data[0].getValue() == 0) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (Data datum : data) {
answer.append(datum.getValue());
}
return answer.toString();
}
}
class Data implements Comparable<Data> {
private final int value;
private final int reformattedValue;
Data(int value) {
this.value = value;
this.reformattedValue = this.reformat(value);
}
private int reformat(int num) {
int answer = num;
if (num < 10) {
for (int i = 0; i < 3; i++) {
answer *= 10;
answer += num;
}
} else if (num < 100) {
answer *= 100;
answer += num;
} else if (num < 1000) {
answer *= 10;
answer += (num / 100);
}
return answer;
}
public int getValue() {
return this.value;
}
public int getReformattedValue() {
return this.reformattedValue;
}
@Override
public int compareTo(Data o) {
return o.getReformattedValue() - this.getReformattedValue();
}
}
'알고리즘 문제 > Programmers' 카테고리의 다른 글
[프로그래머스] 모의고사 - Java (0) | 2021.04.09 |
---|---|
[프로그래머스] H-Index - Java (0) | 2021.04.07 |
[프로그래머스] 주식 가격 - Java (0) | 2021.03.29 |
[프로그래머스] 프린터 - Java (0) | 2021.03.23 |
[프로그래머스] 기능 개발 - Java (0) | 2021.03.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준
- 자료구조
- programmers
- 힙
- Algorithm
- greedy
- java
- Sorting
- 멀리 뛰기
- 연습문제
- BFS
- 그래프
- Queue
- dfs
- 해시
- 코딩테스트
- 자바
- 탐욕법
- 알고리즘
- 정렬
- dynamic programming
- 완전탐색
- Heap
- Hash
- 동적계획법
- 프로그래머스
- 데브코스
- stack
- 큐
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함