본문 바로가기
공부 정리/백준

[백준] 자바 1105 팔

by 경적필패. 2021. 2. 16.
반응형

문제

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

입력

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

출력

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


테스트 케이스

초록색 입력/ 검은색 출력


접근

주어진 범위 안에서 8이 가장 적게 나온 경우를 찾는 문제입니다.

800 ->899 (8 하나가 백의 자리로 무조건 들어감)

800 ->900 (900, 8이 안 들어가도 되는 수 있음)

80000 -> 89999 (8 무조건 들어가야 함)

80000 -> 81234312312 (8 안 들어가도 되는 수가 있음.)

즉,

1. 시작하는 수와 끝 수의 자릿수가 다르면 8이 안 들어가도 되는 수가 무조건 존재하게 됩니다.

2. 시작하는 수와 끝 수의 자릿수는 같으나 큰 수의 자릿수부터 비교하였을 때 다르면 8이 안 들어가도 되는 수가 존재하게 됩니다.(ex 89 ->90)


코드

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	1105 problem 팔(8)
	*/

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		String strLeft = st.nextToken();
		String strRight = st.nextToken();
		int count = 0;
		
		if(strLeft.length() == strRight.length()) {
			for(int i=0; i<strLeft.length(); i++) {
				if(strLeft.charAt(i) != strRight.charAt(i)) {
					break;
				}
				else {
					if(strLeft.charAt(i) == '8') {
						count++;
					}
				}
			}
		}
		System.out.println(count);
		bw.close();
	}
}


주의

break; 를 continue; 로 바꾸면

5678 6798에서 틀린 값이 나오게 됩니다.

반응형

'공부 정리 > 백준' 카테고리의 다른 글

[백준] 자바 1439 뒤집기  (0) 2021.02.18
[백준] 자바 1041 주사위  (0) 2021.02.17
[백준] 자바 1449 수리공 항승  (0) 2021.02.15
[백준] 자바 2751 수 정렬하기 2  (0) 2021.02.15
[백준] 자바 5585 거스름돈  (0) 2021.02.14

댓글