1. 문제 - 프로그래머스 가장 큰 수
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
2. 코드
import java.util.Arrays;
public class Solution {
public String solution(int[] numbers) {
String[] arr = new String[numbers.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(numbers[i]);
}
// 내림차순
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
// 0일 경우 처리
if (arr[0].equals("0")) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
answer.append(arr[i]);
}
return answer.toString();
}
}
1. 문제- 프로그래머스 전화번호부 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
- 구조대 : 119
- 박준영 : 97 674 223
- 지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한사항
- phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
- 같은 전화번호가 중복해서 들어있지 않습니다.
입출력 예
phone_book | return |
["119", "97674223", "1195524421"] | false |
["123","456","789"] | true |
["12","123","1235","567","88"] | false |
입출력 예 설명
- 예제 #1 : 앞에서 설명한 예와 같습니다.
- 예제 #2 : 한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
- 예제 #3 : 첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.
2. 코드
startsWith()로 푸는 버전
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
// 정렬
Arrays.sort(phone_book);
// 두 개씩 비교
for (int i = 0; i < phone_book.length -1; i++){
if (phone_book[i+1].startsWith(phone_book[i])){
return false;
}
}
return true;
}
}
해시로 푸는 버전
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
HashSet<String> set = new HashSet<>(Arrays.asList(phone_book));
for (String s : phone_book){
// 현재 s보다 길이가 더 짧은 String이 set에 있는지 확인
for (int i = 1; i < s.length(); i++){
if (set.contains(s.substring(0, i))){
return false;
}
}
}
return true;
}
}
'Coding Test' 카테고리의 다른 글
[TIL/05.06] Leetcode: Group Anagrams (Python) (0) | 2024.05.06 |
---|---|
[TIL/04.12] Algorithm: Greedy (Java) (0) | 2024.04.13 |
[TIL/04.10] Algorithm: 정렬 (Java) (0) | 2024.04.10 |
[TIL/04.10] Algorithm: 백트래킹 (Java) (1) | 2024.04.10 |
[TIL/04.09] Algorithm: Set (Java) (0) | 2024.04.10 |