[프로그래머스] Java Level 1. 정수 내림차순으로 배치하기

2023. 5. 25. 11:01· 알고리즘/Programmers

풀이법

정수 long을 입력 받고 가장 큰 숫자부터 차례대로 내림차순 정렬한 후 출력한다.

long을 배열에 넣고 정렬하면 시간 초과가 날거 같아서 어떤 식으로 풀어야 하는지 고민하였다.

long n을 String 으로 바꾸어 배열에 넣는다.

배열을 내림차순으로 정렬한다.

StringBuilder를 사용하여 하나씩 추가한다. 그리고 다시 Long으로 형변환 후 출력한다


틀린 풀이

import java.util.*;

class Solution {
    public long solution(long n) {
        //% 와 / 를 이용해서
        //n을 뒤에서부터 하나씩 자른 후 list에 추가
        //n의 자리 수 뒤에서부터 줄여나가기
        List<Integer> list = new ArrayList<>();
        long answer = 0;
        String str = "";
        
        while(n!=0) {
            //10으로 나눈 나머지를 구해서 list에 추가
            list.add((int)n%10);
            //뒤에서부터 하나씩 잘라서 n을 변경해주기
            n = n / 10;
        } 
        
        //list정렬하기
        //내림차순 정렬임
        list.sort(Comparator.reverseOrder());
        
        //list에 있는 int들을 String 으로 변환하여
        //str에 저장하기
        for(int i=0; i<list.size(); i++) {
            str += Integer.toString(list.get(i));
        }
        
        answer = Long.parseLong(str);
        

        return answer;
    }
}

테스트 케이스는 맞았지만 다른 테스트 케이스에서 런타임 에러가 발생하여 틀렸다.

n의 범위가 크기 때문에 while문을 돌면서 10으로 나눈 나머지와 10으로 나눈 n을 갱신해주는게 오래 걸린거 같다.


맞은 코드

import java.util.*;

class Solution {
    public long solution(long n) {
        //valueOf 메소드를 사용해서
        //long을 String으로 변환하여 list에 추가한다
        long answer = 0;
        //n을 ""로 한 글자 씩 분리해서 arr 배열에 넣어준다
        String [] arr = String.valueOf(n).split("");

        //배열을 내림차순으로 정렬한다
        Arrays.sort(arr, Collections.reverseOrder());
        
        //시간을 줄이기 위해 StringBuilder를 사용한다
        StringBuilder sb = new StringBuilder();
        for(String str : arr) {
            sb.append(str);
        }
        
        //출력 시에서는 long을 String으로 바꿔줘야 한다
        return Long.parseLong(sb.toString());
    }
}

풀이과정은 주석으로 달아놓았다.

메소드를 자유롭게 쓸 수 있는 능력을 길러야겠다.

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > Programmers' 카테고리의 다른 글

[프로그래머스] Java Level 1. 두 정수 사이의 합  (0) 2023.05.25
[프로그래머스] Java Level 1. 하샤드 수  (0) 2023.05.25
[프로그래머스] Java Level 1. 정수 제곱근 판별  (0) 2023.05.25
[프로그래머스] Java Level1. 문자열을 정수로 바꾸기  (0) 2023.05.20
[프로그래머스] Java Level1. 자연수 뒤집어 배열로 만들기  (0) 2023.05.20
'알고리즘/Programmers' 카테고리의 다른 글
  • [프로그래머스] Java Level 1. 하샤드 수
  • [프로그래머스] Java Level 1. 정수 제곱근 판별
  • [프로그래머스] Java Level1. 문자열을 정수로 바꾸기
  • [프로그래머스] Java Level1. 자연수 뒤집어 배열로 만들기
개발자 정지은
개발자 정지은
프로그래밍 공부 기록
개발자 정지은
PROGRAMMING DIARY
개발자 정지은
전체
오늘
어제
  • 분류 전체보기 (107)
    • 알고리즘 (49)
      • BeakJoon (27)
      • SWEA (9)
      • Inflearn (2)
      • CodeSignal (1)
      • Programmers (10)
    • FE (0)
      • Javascript (0)
      • React (0)
    • BE (0)
    • CS공부 (13)
      • Database (7)
      • IT기본지식 (6)
    • TIL (45)
      • 프로그래머스 데브코스 (45)
    • Project (0)
      • DreamHi (0)
      • 인사관리시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • javascript
  • figma
  • 알고리즘
  • 코딩부트캠프
  • 국비지원교육
  • React.JS
  • 프로그래머스 데브코스
  • 피그마
  • 프론트엔드
  • ReactNative
  • 리액트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
개발자 정지은
[프로그래머스] Java Level 1. 정수 내림차순으로 배치하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.