코딩테스트/그리디(Greedy)

[Java] 백준 1105번 : 팔

sujin7837 2022. 5. 30. 23:51
반응형

문제

L과 R이 주어진다. 이때, L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오.

예제 입력 1

1 10

예제 출력 1

0

예제 입력 2

88 88

예제 출력 2

2

예제 입력 3

800 899

예제 출력 3

1

예제 입력 4

8808 8880

예제 출력 4

2

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	private static BufferedReader br;
	private static StringTokenizer st;
	
	private static String l, r;
	
	public static void main(String[] args) throws IOException {
		br=new BufferedReader(new InputStreamReader(System.in));
		st=new StringTokenizer(br.readLine());
		l=st.nextToken();
		r=st.nextToken();
		
		int result=0;	// 두 수의 자릿수가 다르면 8이 0개인 경우가 무조건 가능
		if(l.length()==r.length()) {	// 두 수의 자릿수가 같으면 
			for(int i=0;i<l.length();i++) {
				if(l.charAt(i)=='8' && r.charAt(i)=='8') result++;	// 각 자릿수에서 공통으로 8이 나오면 8의 개수를 증가시킴
				else if(l.charAt(i)!=r.charAt(i)) break;	// 각 자릿수의 숫자가 다르면 더이상 8이 나오지 않는 경우가 최소가 되므로 break
			}
		}
		
		System.out.println(result);
	}

}

1. 두 수의 자릿수가 다른 경우 : 8이 0개인 경우가 무조건 가능

2. 두 수의 자릿수가 같은 경우

    2-1. 공통으로 8이 나오는 자리는 무조건 8이 존재하므로 개수 증가시킴

    2-2. 공통이지만 8이 아닌 경우는 continue

    2-3. 서로 다른 수인 경우 break

반응형