[Java] (실습) 가장 작은 수로 변환

2022. 7. 11. 18:39·Java/코딩테스트 연습 & 실습

중복처리 수정 필요

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.HashSet;
import java.util.Scanner;

public class Q1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
	
		
		System.out.println("4자리 정수를 입력하세요: ");
		int num = sc.nextInt();
		
		if(num>=1000 && num<=9999) {
			smallestValue(num);
		} else {
			System.out.println("1000~9999사이의 정수를 입력하세요.");
		}
	}

	public static void smallestValue(int num) {
		ArrayList<Integer> arr = new ArrayList<>();		
		List<Integer> result = new ArrayList<>();
		
		//1. 각 자리수 구하기
		while (num > 0) {
			arr.add(num % 10);
			num /= 10;
		}

		//2. 정렬하기
		Collections.sort(arr);
		
		//3.순열 출력
		reculsion(arr, result, arr.size(), 4);
		
		//4. 정렬한 arr에서 0의 위치를 변경해주기
		for(int i = 0; i < arr.size(); i++) {
			if (arr.get(i) == 0) {
				continue;
			} else if (arr.get(i) != 0) {
				arr.add(0, arr.get(i));
				arr.remove(i + 1);
				break;
			}
		}

		//출력
		System.out.println("\n---가장 작은 숫자---");
		for (Integer i : arr) {
			System.out.print(i);
		}
	}
	
	// 순열
	private static void reculsion(ArrayList<Integer> arr, List<Integer> result, int n, int r) {
		String str = "";
		HashSet<Integer> a = new HashSet<>();
		
		if (r == 0) {
	        for (Integer item : result) {	
				str += item;
				if(str.length()>=4 && str.charAt(0)!='0') {
					a.add(Integer.valueOf(str));
				}
			}
	        
	        for(Integer i : a) {
	        	System.out.print(i);
	        }
	        System.out.println(a);
	        
			return;
		}
	
		for (int i = 0; i < n; i++) {
			result.add(arr.remove(i));
			reculsion(arr, result, n - 1, r - 1);
			arr.add(i, result.remove(result.size() - 1));
		}
	}
}

 

'Java > 코딩테스트 연습 & 실습' 카테고리의 다른 글

[Java] 이진검색 재귀함수로 구현하기  (0) 2022.07.13
[Java] (실습) Baby-gin  (1) 2022.07.11
[Java] (실습) 자바 정돈된 수  (0) 2022.07.11
[Java] (실습) 자바 로또 프로그램  (0) 2022.07.11
[Java] 별 찍기 예제 (중첩 for문)  (1) 2022.06.22
'Java/코딩테스트 연습 & 실습' 카테고리의 다른 글
  • [Java] (실습) Baby-gin
  • [Java] (실습) 자바 정돈된 수
  • [Java] (실습) 자바 로또 프로그램
  • [Java] 별 찍기 예제 (중첩 for문)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    React Native Chart
    자바
    node.js
    REST API
    스택
    그리디
    티스토리챌린지
    JDBC
    DI
    오블완
    서블릿
    IS-A
    Java
    Express
    파이썬
    리액트 네이티브
    큐
    포스트맨
    react-native-chart-kit
    오라클
    쓰레드
    React Native
    next-intl
    자바 스프링
    자바스크립트
    JSP
    react
    상속
    Python
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] (실습) 가장 작은 수로 변환
상단으로

티스토리툴바