ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • BFS
  • Queue
  • 안드로이드
  • git bash
  • kotiln
  • java
  • 깃허브
  • React
  • entrySet
  • dfs
  • 해시
  • sort
  • 프로그래머스 Lv.2
  • greedy
  • compareTo()
  • 깃
  • HashMap
  • Comparator
  • git
  • 프로그래머스
  • DP
  • getOrDefault
  • Android
  • PriorityQueue
  • reactjs
  • stack
  • 백준
  • Arrays.sort()
  • 스택/큐
  • 코틀린

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 > 가장 큰 수

2022. 2. 28. 06:11

https://programmers.co.kr/learn/courses/30/lessons/42746?language=java 

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

풀이

앞 뒤 문자를 직접 붙여보고 비교해서 푼다. 예를들어 30과 34면 3034와 3430을 비교해서 3430이 더 크므로 34, 30 순으로 내림차순 정렬을 해준다. 처음에는 삽입정렬 하듯이 for문을 2번돌려서 compareTo() 함수를 이용해 문자열을 비교했는데 런타임 에러가 났었다..

Arrays.sort() : String 배열 number를 정렬

Comparator 인터페이스 : 두 매개변수 객체를 비교하는 역할

  • compare() 메소드 : compator 인터페이스 내 선언된 메소드로 반드시 오버라이딩(구현). 객체를 비교할 기준을 정의
  • a.compareTo(b) : 'a-b' 순서로 해당 문자의 아스키 코드 값을 뺀 결과(int)를 리턴. 어떤 문자가 사전적인 순서로 앞에 있는지 리턴해주기 때문에 정렬에 사용한다.
  • (b+a).compareTo(a+b) 의 결과가 양수면 b+a가 더 큰 수이기 때문에 b,a 순으로 정렬한다.

※ 주의할 점 : 테스트케이스가 {0,0,0,0}일 경우 "0" 한 문자열을 리턴

import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        // 문자열 배열로 변환
        String[] number = new String[numbers.length];
        for(int i=0;i<numbers.length;i++){
            number[i] = String.valueOf(numbers[i]);
        }
        
        // 내림차순 정렬
        Arrays.sort(number, new Comparator<String>(){
            public int compare(String a, String b){
                return (b+a).compareTo(a+b);
            }
        });
        
        // 배열에 0 만 있는 경우(정렬배열 맨처음이 0) "0" 리턴
        if(number[0].equals("0")) return "0";
        
        // 문자열 합치기
        for(String n : number)
            answer+=n;
        return answer;
    }
}

 

+

람다식 : comparator와 같이 하나의 추상메소드만 가진 인터페이스를 구현할 때 사용할 수 있는 문법이다.

(매개변수) -> 명령문; 
(매개변수) -> {명령문;명령문;명령문;return;}


위의 Arrays 정렬 코드를 람다식으로 바꿔보면 아래와 같다.

// 정렬
Arrays.sort(number, new Comparator<String>(){
    public int compare(String a, String b){
        return (b+a).compareTo(a+b);
    }
});

// Compatator 로직을 람다식으로
Comparator<String> comp = (o1, o2) -> (o2 + o1).compareTo(o1 + o2);
Arrays.sort(number, comp);

// 함수형 인터페이스가 있는 자리를 람다식으로 대신하기
Arrays.sort(number, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv.2 > 124 나라의 숫자  (0) 2022.03.04
[Java] 프로그래머스 Lv.2 > 멀쩡한 사각형  (0) 2022.02.28
[Java] 프로그래머스 Lv.2 > 큰 수 만들기  (0) 2022.02.28
[Java] 프로그래머스 Lv.2 > 기능개발  (0) 2022.02.28
[Java] 프로그래머스 Lv.2 > 다리를 지나는 트럭  (0) 2022.02.28
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv.2 > 124 나라의 숫자
    • [Java] 프로그래머스 Lv.2 > 멀쩡한 사각형
    • [Java] 프로그래머스 Lv.2 > 큰 수 만들기
    • [Java] 프로그래머스 Lv.2 > 기능개발
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바