https://www.acmicpc.net/problem/1527
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int count = 0;
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
for(int i = A; i <= B; i++) {
int n = i;
while (n > 0) {
if (n % 10 == 4 || n % 10 == 7) {
n = n / 10;
if (n == 0) count++;
else continue;
} else break;
}
}
System.out.println(count);
}
}
처음에는 평소에 하던거처럼 String으로 변환 후 문자열 길이만큼 돌면서 charAt을 써서 각 자리가 4 or 7인지 확인하였다 예제 몇개를 넣어 확인해봤을때는 정답이 나와서 제출했더니 메모리 초과가 나왔다
for(int i = A; i <= B; i++) {
String str = Integer.toString(i);
for(int j=0; j<str.length(); j++) {
if(str.charAt(j) == '4' || str.charAt(j) == '7') {
if(j == str.length()-1) count++;
else continue;
} else break;
}
}
A는 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. B는 A보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다.
-> 조건을 보니 수가 엄청 커지는 경우가 있을거고 이럴때 문자열로 변환하고 하나하나 비교해주는 과정이 부담되니 메모리 초과가 나오는거같았다
그래서 여러가지 생각해보던 중 숫자를 10으로 나눠서 나머지를 확인하고 나머지가 4 또는 7이 맞으면(=수의 끝자리가 4 또는 7) 10으로 나눈 몫을 다음 값으로 주는 식으로 반복하니 해결이 되었다!!!
'코딩테스트-알고리즘 > 백준 BOJ' 카테고리의 다른 글
[백준 BOJ/Silver V] 11650번 : 좌표 정렬하기 (1) | 2024.01.15 |
---|---|
[백준 BOJ/Silver V] 1181번 : 단어 정렬 (2) | 2024.01.14 |
[백준 BOJ/Bronze I] 1157번 : 단어 공부 (0) | 2024.01.14 |
[백준 BOJ/Silver IV] 11652번 : 카드 (4) | 2024.01.13 |
[백준 BOJ/Silver II] 퍼거슨과 사과 (1) | 2024.01.08 |