(20164호) 오드홀릭 넘버틴

질문

https://www.acmicpc.net/problem/20164

20164호: 이상한 호석

짝수와 홀수 중에서 호석이는 이니셜이 같은 홀수를 선호한다. 운전을 하던 호석은 앞차의 번호판이 온통 홀수인 것을 보고 귀엽다고 생각했다. 나는 단지 홀수를 갖고 싶다.그렇게

www.acmicpc.net

해결책

(질문)

  • 숫자가 주어지면 Hosen은 하나의 계산에서 다음 순서로 진행합니다.
    • 종이에 각 숫자의 홀수 개수를 적으세요.
    • 숫자가 한 자리이면 아무 작업도 수행하지 않고 종료됩니다.
    • 숫자가 2자리일 경우 2로 나누어 합을 구하여 새로운 숫자로 취급합니다.
    • 숫자가 3자리 이상일 경우 임의의 위치에서 잘려서 3개의 숫자로 나누어 세 숫자의 합을 새로운 숫자로 간주한다.
  • 이런 식으로 1회 연산 후 기록된 숫자를 모두 더해 새로운 숫자를 얻고 계속해서 연산을 하며 각 연산에서 홀수의 개수를 센다. (최소 최대)

(해결하다)

  • 재귀적 사용
    • 연산을 수행한 후 문자열 값과 지금까지 발생한 정수의 홀수를 매개변수로 받습니다.
    • 현재 전달된 문자열을 3자리 이상, 2자리 또는 1자리로 분할하여 문제를 해결합니다.
    • 문자열이 3자리를 초과하면 가능한 모든 분할 가능한 상황을 고려하여 문자열을 나누고, int로 변환하고, 더하고, 문자열로 변환하고, 재귀적으로 호출합니다.
    • 문자열이 2자리인 경우 위와 동일합니다.
    • 문자열이 1비트이면 종료 조건입니다. -> 최소값과 최대값을 업데이트하고 재귀를 종료합니다.

(암호)

#include <iostream>
#include <string>

using namespace std;

string N;
int min_value = 987654321;
int max_value;
int ans;

// string이 주어졌을 때, 홀수 개수 찾는 method
int findEvenCnt(string s){
    int cnt = 0;
    for(int i=0; i<s.size(); i++){
        if((s(i) - '0') % 2 != 0) cnt++;
    }
    return cnt;
}

void calculate(string n, int ans){ // n: 연산 이후 다 더해진 값의 string, ans: 현재까지 나온 홀수 개수
    ans += findEvenCnt(n); // 홀수 개수 count
    
    if(n.size() >= 3){ // 세자리 이상이면 3개의 수로 분할 후 더함.
        for(int i=0; i<n.size()-2; i++){
            for(int j=1; j<n.size()-i-1; j++){
                string token1 = n.substr(0, i+1);
                string token2 = n.substr(i+1, j);
                string token3 = n.substr(i+j+1);
                int num = stoi(token1) + stoi(token2) + stoi(token3); // 3개의 string token을 다 더해서 number를 만든다.
                string s = to_string(num); // 만든 number를 다시 string으로 변환해서
                calculate(s, ans); // 재귀호출
            }
        }
        
    }
    if(n.size() == 2){ // 두개로 나눠서 더함. 세자리 이상인 경우와 로직 동일.
        string token1 = n.substr(0, 1);
        string token2 = n.substr(1, 1);
        int num = stoi(token1) + stoi(token2);
        string s = to_string(num);
        calculate(s, ans);
    }
    
    if(n.size() == 1){ // string size가 1인 경우는 min, max 갱신 후 재귀 종료.
        if(min_value > ans){
            min_value = ans;
        }
        if(max_value < ans){
            max_value = ans;
        }
        return;
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    // Input
    cin >> N;
    
    // Solution
    calculate(N, 0);
    
    // Answer
    cout << min_value << ' ' << max_value;
    
    
    return 0;
}

(경고하다)

문자열 길이가 3보다 크면 적절한 구문 분석으로 쉽게 해결할 수 있습니다. 구문 분석 부분에 주의하십시오.

Similar Posts

  • (한국어 수업) 한국어로 메모 추가하기/메모를 이용해 출력하기

    팀원들과 업무를 하다보면 가끔 자기가 쓴 글에 대한 토론을 남기고 공유하거나, 왜 글을 썼는지 설명하는 파일을 보내 상사에게 보고하기도 한다. 이 경우 한글로 제공되는 메모 기능은 괜찮습니다. 오늘은 한글 문서에 주석을 추가하는 방법과 포함된 주석을 출력하는 방법에 대해 알아보겠습니다. 1. 한글 노트 추가 1) 한글 메뉴에서 “입력” 탭을 선택합니다. 2) 문구를 메모로 드래그하고 “메모” 버튼을…

  • 가로수길 남성 피부관리: 마이돈내산 신사역 남성케어 에스테틱 클라우드

    가로수길 남성 피부관리: 마이돈내산 신사역 남성케어 에스테틱 클라우드 가로수길 남성 피부관리: 마이돈내산 신사역 남성케어 에스테틱 클라우드 남성스킨케어, 남성스킨케어, 신사역 스킨케어샵, 신사역 남성스킨케어, 신사역 남성스킨케어, 신사역 남성스킨케어, 가로수길 스킨케어 ‘에스테틱 클라우드’ 남성스킨케어, 남성스킨케어, 신사역 스킨케어샵, 신사역 남성스킨케어, 신사역 남성스킨케어, 신사역 남성스킨케어, 가로수길 스킨케어 ‘에스테틱 클라우드’ 영업시간: 10:30-21:30 전화번호: 010-8432-8188지도 (ง_•ง)ง남성 피부관리, 남성 수분 관리, 이것은 죄악의…

  • 샹양에서 꼭 가봐야 할 10곳(최신 관광지)

    강원도 양양은 서핑으로 유명한 지역이다. 최근 몇 년간 많은 투자와 개발이 이루어진 도시로 많은 관광객이 유입되고 있습니다. 그 중에서도 대표적인 여름 스포츠인 서핑을 즐기기 위해 많은 사람들이 찾는 도시입니다. 서핑 외에도 다양한 수상 스포츠가 있습니다. 샹양에서 꼭 가봐야 할 10곳 나는 또한 Xiangyang에 갔고 여름 레저 스포츠와 주변 시설은 관광에 매우 적합합니다. 뿐만 아니라 Xiangyang은…

  • ViewPager – 기본

    1. 정의 ViewPager는 Android에서 제공하는 위젯 중 하나로, 좌우로 슬라이딩하면서 화면에 여러 뷰를 표시하는 기능을 제공합니다. 탭 메뉴나 이미지 슬라이더 등 다양한 용도로 사용되며, 여러 보기를 규칙적으로 배열하여 스크롤 가능한 화면으로 구성할 수 있습니다. 언뜻보기에는 recyclerView와 비슷해 보이지만 viewpager를 사용하는 기능이 있어 화면의 특정 부분을 지나면 화면이 전환됩니다. 2. 사용방법 2-1.xml 부분 <androidx.viewpager.widget.ViewPager android:id=”@+id/viewPager” android:layout_width=”match_parent”…

  • 등반 한계

    기존 올림픽 스포츠를 살펴보겠습니다. 지난 50년과 지난 10년 동안의 진행 상황을 대략적으로 살펴보겠습니다. 단거리 1%, 장거리 달리기 1.5%, 높이뛰기 3%, 장대높이뛰기 5%, 수영 5%, 스키 10%. 장대높이뛰기의 유리섬유 장대 개발, 수영의 마찰 최소화, 스키 기술의 진화와 같은 장비의 주요 개선이 분명히 있었습니다. 불행하게도, 경기력 향상을 위한 약물 종류 또한 올림픽 운동의 성장에 실질적인 요인이었습니다. 기술적…

  • 뱃살 다이어트 유산균 먹고 간단하게 하자

    안녕!! 내 인생에 쏙 들어온 그거!더욤…기장 짧은옷을 자주입어서 더욱더 좋구요 또, 몸선이 드러나거나 볼륨감 넘치게 퍼지는 데일리룩을 좋아해서~.~물론 통통한 배로도 입을 수 있지만 조금 더 여리여리한 분위기를 연출하고 싶은 나 그래서 큰 비빔밥 한 그릇이 뚝뚝뚝(웃음) 아 뚝배기가 엄청 큰데 내 뱃속에 다 들어가도… 공간이 있어요 그래서 초콜릿이랑 사탕 우물쭈물 먹어^▽ㅠ매일 먹을 분량을 정해놓을 정도로…