👩‍💻 코테 공부/코테 공부

[코테 - Java] 프로그래머스 - 정수 내림차순으로 배치하기

수댕ʕت̫͡ʔ 2024. 9. 11. 17:17

https://school.programmers.co.kr/learn/courses/30/lessons/12933

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제

함수 solution은 정수 n을 매개변수로 입력받습니다. 

n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 

예를들어 n이 118372면 873211을 리턴하면 됩니다.

 

2. 내가 푼 답안

1) Solution

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public long solution(long n) {
        // 숫자를 문자열로 변환
        String data = String.valueOf(n);
        
        // 리스트에 담기
        List<Integer> temp = new ArrayList<>();
        
        // 시간복잡도 : O(n)
        for (int i = 0; i < data.length(); i++) {
            temp.add(Character.getNumericValue(data.charAt(i)));
        }
        
        // 정렬 - 시간복잡도 : O(nlon(n))
        Collections.sort(temp, Collections.reverseOrder());
        
        // 합치기 - 시간복잡도 : O(n)
        String result = temp.stream().map(String::valueOf).collect(Collectors.joining());
        
        // 정수로 변환
        long answer = Long.parseLong(result);
        
        return answer;
        
        // 총 시간복잡도 : O(nlog(n))
    }
}

 

2) Solution

class Solution {
  public long solution(long n) {
        String[] list = String.valueOf(n).split("");
        Arrays.sort(list, Collections.reverseOrder());

        String result = String.join("", list);
        long answer = Long.parseLong(result);
      
      return answer;
  }
    
}

 

 

4. 문법 정리

 

- 이번에는 새로 배우는게 많았다.

 

1. Join

 

1) 스트링 배열, 리스트 -> 스트링 문자열로

import java.util.*;

public class Example {
    public static void main(String[] args) {
        String[] array = {"a", "b", "c"};
        String result = String.join(", ", array);
        System.out.println(result); // 출력: a, b, c

        List<String> list = Arrays.asList("x", "y", "z");
        String resultFromList = String.join(" - ", list);
        System.out.println(resultFromList); // 출력: x - y - z
    }
}

 

2) int 배열, 리스트 -> 스트링 문자열로

import java.util.*;
import java.util.stream.Collectors;

public class Example {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        // List<Integer>를 List<String>으로 변환
        List<String> stringList = list.stream()
                                      .map(String::valueOf)
                                      .collect(Collectors.toList());

        // 문자열 리스트를 결합
        String result = String.join("", stringList);
        System.out.println(result); // 출력: 12345
    }
}

 

import java.util.Arrays;
import java.util.stream.Collectors;

public class Example {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};

        // int[]를 Stream으로 변환하고, 각 요소를 문자열로 변환 후 결합
        String result = Arrays.stream(array)
                              .mapToObj(String::valueOf)
                              .collect(Collectors.joining(""));
        System.out.println(result); // 출력: 12345
    }
}