//GitHub https://github.com/vellimole0621
백준 1105번 : 팔
(문제 - https://www.acmicpc.net/problem/1105)
문제 설명 : 자연수 L 과 R을 입력 받아, L 과 R 그리고 그 사이 수까지, 8을 가장 적게 가지고 있는 수의 8의 개수를 출력하라.
풀이 : L R을 입력 받음 >> 8 저장할 변수와 , L의 8 개수 저장할 변수 생성 >> case 1. R이 L 보다 자릿수가 많은 경우 0 출력 // case2. 자릿수가 같을 경우, 가장 큰 자릿수부터 서로 같은 수를 갖는 자릿수까지 8의 개수를 검사해, 그 갯수를 출력
import java.util.*;
public class Solve220820 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// L 과 R 입력 받기
int L = sc.nextInt();
int R = sc.nextInt();
// 8 저장할 변수와 , L의 8 개수 저장할 변수 생성
int N_L = 0;
int i = 0;
// R이 L 보다 자릿수가 많은 경우 0 출력
String B = String.valueOf(R);
String A = String.valueOf(L);
if(B.length() > A.length()){
System.out.println(0);
}else{
// L 과 R 이 자릿수가 같은 경우, 같은 숫자인 자릿수 부분까지만 '8' 개수 확인 후 출력
char[] A_L = A.toCharArray();
char[] B_L = B.toCharArray();
while(i != A.length()){
if(A_L[i] == B_L[i]){
if(A_L[i] == '8'){
N_L++;
}
}else if(A_L[i] != B_L[i]){
break;
}
i++;
}
System.out.println(N_L);
}
어려웠던 부분 : 기존의 반복문으로 전부 8의 개수를 검사해 출력하는 방법을 사용했으나 시간 초과로 실패하였다. 문제를 풀 때 단순히 모든 경우의 수를 검사해 출력하기 보다는 최대한으로 경우의 수를 나눠서 반복 횟수를 줄이는 방법을 생각해보자.
'프로그래밍 > Java' 카테고리의 다른 글
[자바 JAVA/알고리즘] 백준 1157번 : 단어 공부 (0) | 2022.08.19 |
---|---|
[자바 JAVA/알고리즘] 백준 1152번 : 단어의 개수 (0) | 2022.08.19 |
[자바 JAVA/알고리즘] 백준 1343번 : 폴리오미노 (0) | 2022.08.18 |
[자바 JAVA/알고리즘] 백준 2839번 : 설탕 배달 (0) | 2022.08.18 |
[자바 JAVA/알고리즘] 백준 1476번 : 날짜 계산 (0) | 2022.08.18 |