[프로그래머스] 모의고사 / 가장 큰 수 (07.11)
문제
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 ��
programmers.co.kr
접근법
Level 1 문제여서 간단한 문제였다.
우선 수포자들이 찍는 번호가 지정이 되어있으므로 배열로 처리하여 반복문을 사용해야한다고 생각하였다.
반복되는 규칙과 규칙의 길이가 다른 부분을 어떻게 처리해주느냐가 가장 중요한 부분이었다고 생각한다.
코드
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
int first[] = {1,2,3,4,5};
int second[] = {2,1,2,3,2,4,2,5};
int third[] = {3,3,1,1,2,2,4,4,5,5};
int cnt[] = new int[4];
for(int i=0;i<answers.length;i++){
int solve = answers[i];
if(first[i%first.length] == solve)
cnt[1] ++;
if(second[i%second.length] == solve)
cnt[2] ++;
if(third[i%third.length] == solve)
cnt[3] ++;
}
int max = Math.max(cnt[1], Math.max(cnt[2], cnt[3]));
List<Integer> list = new LinkedList<>();
for(int i=1;i<cnt.length;i++){
if(cnt[i] == max)
list.add(i);
}
answer = new int[list.size()];
for(int i=0;i<answer.length;i++){
answer[i] = list.get(i);
}
Arrays.sort(answer);
return answer;
}
}
문제
https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 ��
programmers.co.kr
접근법
처음에는 단순히 정수들을 문자열로 바꾸고 정렬을 하면 될 것이라고 생각하고 코드를 짰다.
위 코드의 문제점은 맨 앞자리가 같은 숫자가 존재할 때 발생하였다.
입출력 예에서 보았을 때 30과 3은 303 또는 330으로 합쳐질 수가 있다. 근데 단순히 문자열을 역순으로 정렬하였을 경우에는 30 3 순으로 정렬이 되기 때문에 까다로웠다.
그래서 정렬을 할때 JAVA8의 람다식을 사용하여서 두 문자열을 붙여보았을 때를 비교하여 정렬하였다.
마지막으로 Test Case 하나가 틀렸는데
만약 입력이 {0, 0, 0, 0}이 되었을 경우 답이 0000이 나오는 경우가 발생하여서 그 부분을 수정하였다.
코드
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
StringBuilder answer = new StringBuilder();
String[] numStr = new String[numbers.length];
for(int i=0;i<numbers.length;i++){
numStr[i] = String.valueOf(numbers[i]);
}
Arrays.sort(numStr, (o1, o2) -> String.valueOf(Long.parseLong(o1+o2))
.compareTo(String.valueOf(Long.parseLong(o2+o1))));
int cnt =0;
for(int i=numStr.length-1;i>=0;i--) {
answer.append(numStr[i]);
if(numStr[i].equals("0"))
cnt++;
}
if(cnt == numStr.length)
return "0";
return answer.toString();
}
}