標準1105,8-Greedy



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

1.アイデア


1)Lの総桁数!=Rのフルビット数
  • 8の最小個数はそれぞれ0
  • 2)Lの総ページ数=Rの総ページ数.

  • 同じ桁数ごとに高い桁数から比較し、8で同じ桁数を表す

  • 2つの桁数が異なる場合は、比較を終了します.
  • ex)
  • 800、899=>1(白位8)
  • 8808、8880=>2(天字8、白字8)
  • 1208、1288=>0(10ビット比較の場合、違いにより比較終了)
  • 88083、88084=>3(万位8、千位8、百位0なので比較的続き、10位8)
  • 2.資料構造


    3.時間複雑度

  • O(len)
    =>len:LまたはRの文字列長を入力
    =>len最大値代入:10
  • コード#コード#

    import java.io.*;
    import java.util.StringTokenizer;
    
    public class Main2 {
    	static String L, R;				// 1 <= L <= R (최대 20억)
    	static int minCount;			// 가장 적은 8 개수
    
    	static void solution() {
    		// 1) L 의 전체 자릿 수 != R 의 전체 자릿 수인 경우
    		if (L.length() != R.length()) {
    			minCount = 0;
    			return;
    		}
    
    		// 2) L 의 전체 자릿 수 == R 의 전체 자릿 수인 경우
    		for (int i = 0; i < L.length(); i++) {
    			// 서로 자릿 수 값이 다르면, 비교 종료
    			if (L.charAt(i) != R.charAt(i))
    				break;
    			// 각 동일 자릿 수를 비교하여, 8로 같은 자릿 수의 개수
    			else if (L.charAt(i) == '8' && R.charAt(i) == '8')
    				minCount++;
    		}
    	}
    
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(
    				new InputStreamReader(System.in)
    		);
    		StringTokenizer st = new StringTokenizer(br.readLine());
    
    		L = st.nextToken();
    		R = st.nextToken();
    
    		solution();
    		System.out.println(minCount);
    	}
    }