Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 숫자에 대한 최대 시간

<시간/>

4자리 배열이 있다고 가정하고 만들 수 있는 가장 큰 24시간 시간을 찾아야 합니다. 가장 작은 24시간 시간은 00:00이고 가장 큰 시간은 23:59입니다. 00:00부터 시작하여 자정 이후 시간이 더 경과하면 시간이 더 커집니다. 답을 길이 5의 문자열로 반환해야 합니다. 반환할 유효한 시간이 없으면 빈 문자열을 반환합니다.

따라서 입력이 [1,2,3,4]와 같으면 출력은 "23:41"이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • isValid() 함수를 정의하면 문자열이 필요합니다.
  • a[0]> '2'이면 -
    • 거짓 반환
  • a[0]이 '2'와 같고 a[1]> '3'이면 -
    • 거짓 반환
  • a[3]> '5'이면 -
    • 거짓 반환
  • 참을 반환
  • dfs() 함수를 정의하면 배열 A, res, cur,
  • 가 사용됩니다.
  • cur의 크기가 5와 같으면 -
    • isValid(cur) 및 cur> res인 경우 -
      • res :=cur
    • 반환
  • 초기화 i의 경우:=0, i <4일 때 업데이트(i 1만큼 증가), 수행 -
    • A[i]가 -1과 같지 않으면 -
      • tmp :=A[i]
      • cur :=cur + A[i] + '0'의 ASCII
      • cur의 크기가 2와 같으면 -
        • cur :=cur는 ':'와 연결
      • A[i] :=-1
      • dfs(A, res, cur)
      • A[i] :=tmp
      • cur에서 마지막 요소 삭제
      • cur의 크기가 2와 같으면 -
        • cur에서 마지막 요소 삭제
  • 메인 방법에서 다음을 수행하십시오 -
  • res :=빈 문자열, tmp :=빈 문자열
  • dfs(A, res, tmp)
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   void dfs(vector<int>& A, string& res, string& cur) {
      if (cur.size() == 5) {
         if (isValid(cur) && cur > res)
            res = cur;
            return;
         }
         for (int i = 0; i < 4; ++i) {
            if (A[i] != -1) {
               int tmp = A[i];
               cur += A[i] + '0';
            if (cur.size() == 2)
               cur += ':';
               A[i] = -1;
               dfs(A, res, cur);
               A[i] = tmp;
               cur.pop_back();
               if (cur.size() == 2)
                  cur.pop_back();
            }
         }
   }
   bool isValid(const string a) {
      if (a[0] > '2')
         return false;
         if (a[0] == '2' && a[1] > '3')
            return false;
         if (a[3] > '5')
            return false;
         return true;
   }
   string largestTimeFromDigits(vector<int>& A) {
      string res = "", tmp = "";
      dfs(A, res, tmp);
      return res;
   }
};
main(){
Solution ob;
vector<int> v = {1,2,3,4};
cout << (ob.largestTimeFromDigits(v));
}

입력

{1,2,3,4}

출력

23:41