키보드를 사용하여 문자 'A'를 작성해 보겠습니다. 우리의 목표는 4개의 키만 사용하고 텍스트 필드에 최대 'A'를 쓰는 것입니다. 키는 'A', 'C', 'V' 및 'Ctrl'입니다.
A의 최대 개수를 쓰려면 Ctrl + A를 사용하여 모두를 선택하고 Ctrl + C를 사용하여 복사하고 Ctrl + V를 사용하여 붙여넣습니다.
입력 및 출력
Input: Number of keystrokes, say 7 Output: Maximum Number of A's with 7 keystrokes is: 9 Press A three times. Then Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+V
알고리즘
keyNumbers(keyStrokes)
입력: 키 입력 횟수.
출력: 이 키 입력을 사용하는 최대 문자 수입니다.
Begin if keyStrokes <= 6, then return keyStrokes for n := 1 to 6, do result[n-1] := n done for n := 7 to keyStrokes, do result[n-1] := 0 for breakpoint := n-3 down to 1, do curr := (n – breakpoint - 1)*result[breakpoint - 1] if curr > result[n-1], then result[n - 1] := curr done done result[keyStrokes - 1] End
예시
#include<iostream> using namespace std; int keyNumbers(int keystrokes) { //find number of 'A's using 4 types of keys if (keystrokes <= 6) //if keystrokes are less than 7 return keystrokes; int result[keystrokes]; //store intermediate results for (int n=1; n<=6; n++) //upto 6 keystrokes, we need that number of keystrokes for max result[n-1] = n; for (int n=7; n<=keystrokes; n++) { //for 7th to higher result[n-1] = 0; //initially store 0 as result for (int breakPoint=n-3; breakPoint>=1; breakPoint--) { //find breakpoint to select, copy and paste int curr = (n-breakPoint-1)*result[breakPoint-1]; if (curr > result[n-1]) result[n-1] = curr; } } return result[keystrokes-1]; } int main() { int keystrokes; cout << "Enter Number of keystrokes: "; cin >> keystrokes; cout << "Maximum Number of A's with "<<keystrokes << " keystrokes is: "<< keyNumbers(keystrokes)<<endl; }
출력
Enter Number of keystrokes: 7 Maximum Number of A's with 7 keystrokes is: 9