[BaekJoon] 1105 팔

13460 단어 baekjoonbaekjoon

1.  문제 링크

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

2.  문제

요약

  • 2,000,000,000보다 작거나 같은 자연수 L과 L보다 크거나 같고 2,000,000,000보다 작거나 같은 자연수 R이 주어질 때 L보다 크거나 같고 R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 문제입니다.
  • 입력: 첫 번째 줄에 L과 R이 주어집니다.
  • 출력: 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 출력합니다.

3.  소스코드

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

public class Main {
	public int getLeastEight(int small, int big) {
		int eightNum = 0;
		if(Integer.toString(small).length() != Integer.toString(big).length()) {
			return 0;
		}
		if(small == big) {
			while(small > 0) {
				if(small % 10 == 8) {
					eightNum++;
				}
				small /= 10;
			}
			return eightNum;
		}
		String small_str = Integer.toString(small);
		String big_str = Integer.toString(big);
		for(int i = 0; i < small_str.length(); i++) {
			if(small_str.charAt(i) != big_str.charAt(i)) {
				break;
			}
			if(small_str.charAt(i) == big_str.charAt(i) && small_str.charAt(i) == '8') {
				eightNum++;
			}
		}
		return eightNum;
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String input = br.readLine();
		br.close();
		StringTokenizer st = new StringTokenizer(input);
		int small = Integer.parseInt(st.nextToken());
		int big = Integer.parseInt(st.nextToken());
		Main m = new Main();
		bw.write(m.getLeastEight(small, big) + "\n");
		bw.flush();
		bw.close();
	}
}

4.  접근

  • 만약 L과 R의 자리수가 다르다면 8을 포함하지 않는 숫자가 항상 존재하기 때문에 이러한 경우에는 0을 출력합니다.
  • 또한 L과 R이 같다면 그 숫자만 가능하기 때문에 해당 숫자에 들어있는 8의 개수를 세서 그 개수를 출력합니다.
  • 위 두 경우 모두 아니라면 즉 L과 R의 자리수가 같고 두 숫자가 다르다면 가장 큰 자리수부터 시작하여 가장 작은 자리수까지 한 숫자씩 L과 R을 비교하여 숫자가 서로 달라질 때까지 8의 개수를 세서 그 수를 출력합니다.
  • 가장 큰 자리수부터 한 숫자씩 비교하다가 서로 달라지는 순간부터 그보다 작은 자리수에는 8을 넣지 않은 숫자가 항상 존재하기 때문에 서로 달라지는 순간까지의 8의 개수를 세는 것입니다.

좋은 웹페이지 즐겨찾기