nayoungs
항상 끈기있게
nayoungs
  • 분류 전체보기 (274)
    • Cloud (21)
      • AWS (15)
      • Azure (3)
      • NCP (2)
      • GCP (1)
    • DevOps (68)
      • Docker (16)
      • Kubernetes (50)
      • CICD (2)
    • IaC (25)
      • Ansible (17)
      • Terraform (8)
    • Certification (4)
    • 금융 IT (5)
    • AI (3)
    • Linux (47)
    • 미들웨어 (5)
    • Programming (7)
      • GoLang (3)
      • Spring (4)
    • CS (25)
      • 네트워크 (17)
      • 운영체제 (5)
      • Web (1)
      • 개발 상식 (2)
      • 데이터베이스 (0)
    • Algorithm (59)
      • 프로그래머스 (36)
      • 백준 (18)
      • 알고리즘 정리 (5)
    • ETC (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nayoungs

항상 끈기있게

Algorithm/프로그래머스

(C++) 프로그래머스 level2 : 큰 수 만들기

2022. 2. 14. 18:31
728x90

 

문제 설명

​

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

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

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

​

제한 조건

​

number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.

k는 1 이상 number의 자릿수 미만인 자연수입니다.

​

입출력 예

 
number
k
return
"1924"
2
"94"
"1231234"
3
"3234"
"4177252841"
4
"775841"

 

출처: https://programmers.co.kr/learn/courses/30/lessons/42883

 

 

 

나의 풀이:

#include <string>
#include <vector>
using namespace std;

string solution(string number, int k) {
    int count = 0; //제거한 숫자의 개수
    int t = 0;
    while (count < k && t < number.length()) {
        if (number[t] < number[t + 1]) {
            number.erase(t, 1); //뒤에 숫자가 더 크면 제거
            count++;
            t = 0; //다시 0부터 검사
        }
        else t++;
    }
    if (count != k) number.erase(number.end() - (k - count)); //모두 검사후 숫자가 순차적으로 감소하면 뒤에서부터 k-count개 제거
    return number;
}
 

 

 

greey(탐욕법) 유형의 문제였는데,

 

솔직히 나는 아직도 dfs/bfs, BS(Binary Search) 같이 알고리즘이 탁탁 눈에 보이는게 아니면

 

아니면 그냥 뇌피셜로 푸는것 같다.. ㅋ

 

 

코드 풀이를 하자면,

 

문자열을 돌면서 t번째 숫자가 t+1번째 숫자보다 작으면, t번째 문자를 제거해주었다.

 

이때, while문을 사용했는데, count값이 k가 되거나, t가 문자열의 범위를 벗어났을 때

 

정지하도록 했다.

 

만약 while문이 끝나고도, 즉 number의 숫자가 순차적으로 감소하고 있을 때는

 

뒤에서 k-count개 만큼 제거해주었다!

 

 

 

 

 

 

 

 

 

 

728x90
저작자표시 (새창열림)
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • (C++) 프로그래머스 level2 : H-index
    • (C++) 프로그래머스 level2 : 전화번호 목록
    • (C++) 프로그래머스 level2 : 튜플
    • (C++) 프로그래머스 level2 : 괄호 회전하기
    nayoungs
    nayoungs
    안되면 될 때까지

    티스토리툴바