프로그래머스 2단계 : 큰 수 만들기 (Java 자바)

2023. 10. 5. 19:40·💻 코딩테스트/programmers
728x90

 

 

프로그래머스

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

programmers.co.kr

 

문제 설명


어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

 

 

 

제한사항

 

  • number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
  • k는 1 이상 number의 자릿수 미만인 자연수입니다.

 

입출력 예

 

 

 

 

풀이

 

주어진 숫자 number에서 k개의 수를 제거하여 얻을 수 있는 가장 큰 숫자를 구하는 문제입니다.

 

1. 입력된 숫자를 자릿수별로 분해하여 배열에 저장한 후,

 

2. 남겨야 하는 숫자 개수(count)만큼 반복하면서 가장 큰 숫자를 찾아 결과에 추가

 

3. 이를 위해 func 함수를 사용하여 가능한 범위 내에서 가장 큰 숫자를 찾고,

 

4. 그 숫자를 결과에 추가

 

최종 결과는 문자열로 반환

 

import java.util.*;

class Solution {
    StringBuilder answer; // 결과를 저장할 StringBuilder

    public String solution(String number, int k) {
        answer = new StringBuilder();
        int[] num = new int[number.length()]; // 주어진 숫자를 각 자릿수별로 분해한 배열

        // 주어진 숫자를 각 자릿수별로 분해하여 배열에 저장
        for (int i = 0; i < num.length; i++) {
            num[i] = Integer.parseInt(number.substring(i, i + 1));
        }

        int count = num.length - k; // 남겨야 하는 숫자 개수
        int start = 0;

        // 남겨야 하는 숫자 개수만큼 반복하여 가장 큰 숫자를 찾고 결과에 추가
        while (count > 0) {
            start = func(num, count, start); // 가장 큰 숫자를 찾는 함수 호출
            count--;
        }

        return answer.toString(); // 결과를 문자열로 반환
    }

    public int func(int[] n, int count, int start) {
        int max = n[start]; // 현재 위치부터 시작하는 가장 큰 숫자
        int index = start;

        // 가능한 범위 내에서 가장 큰 숫자를 찾음
        for (int i = start; i <= n.length - count; i++) {
            if (n[i] > max) {
                max = n[i];
                index = i;
            }
        }

        answer.append(max); // 가장 큰 숫자를 결과에 추가
        return index + 1; // 다음 탐색 시작 위치 반환
    }
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'💻 코딩테스트 > programmers' 카테고리의 다른 글

프로그래머스 2단계 : 124 나라의 숫자 (Java 자바)  (0) 2023.10.05
프로그래머스 2단계 : 연속된 부분 수열의 합 (Java 자바)  (0) 2023.10.05
프로그래머스 3단계 : 110 옮기기 (Java 자바)  (0) 2023.10.05
프로그래머스 2단계 : 택배상자 (Java 자바)  (0) 2023.09.28
프로그래머스 2단계 : k진수에서 소수 개수 구하기 (Java 자바)  (0) 2023.09.28
'💻 코딩테스트/programmers' 카테고리의 다른 글
  • 프로그래머스 2단계 : 124 나라의 숫자 (Java 자바)
  • 프로그래머스 2단계 : 연속된 부분 수열의 합 (Java 자바)
  • 프로그래머스 3단계 : 110 옮기기 (Java 자바)
  • 프로그래머스 2단계 : 택배상자 (Java 자바)
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이클립스
    javascript
    Lv2
    JSP
    CSS
    톰캣
    spring
    자바스크립트
    java
    LV3
    springboot
    3단계
    회원 관리 시스템
    programmers
    junit 테스트
    코테
    오블완
    코딩테스트
    HTML
    프로젝트 구조
    프로그래머스
    Lv0
    티스토리챌린지
    자바
    POST
    구현체
    eclipse
    0단계
    2단계
    DFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
프로그래머스 2단계 : 큰 수 만들기 (Java 자바)
상단으로

티스토리툴바