반응형
666을 포함하는 수 중 가장 작은 수 부터 순서를 매겨 N번째의 수를 구하는 문제이다.
이를 해결하기 위해서는 i라는 변수를 두고 이 수를 1부터 차례로 증가시키며
이 수가 666을 포함하는지 안하는지를 확인하면 된다.
만약 666을 포함한다면 count를 증가시켜 count 와 n이 같아질 때의 i값이 n번째 영화 제목이 될 것이다.
이를 위해 while문을 이용한다.
while(count != n) {
if (check(i)) {
count++;
if (count == n) {
System.out.println(i);
}
}
i++;
}
여기서 check() 메소드는 이 수가 666을 포함하는지 아닌지를 판별해 주는 함수이다.
이 함수의 반환값이 true일 때 count를 증가시키고, count가 n과 같아질 때 i를 출력하고 반복문을 종료하면 된다.
다음은 이 i를 체크해주는 check() 메소드를 보도록 하자.
public static boolean check(int i) {
int count = 0;
while (i > 0) {
if (i % 10 == 6) {
i = i / 10;
count++;
} else {
i = i / 10;
count = 0;
}
if (count == 3) {
return true;
}
}
return false;
}
마찬가지로 while문을 이용하여 입력받은 수를 0이 될 때 까지 반복한다.
i를 10으로 나눈 나머지가 6이라면 count를 증가시키고 아니라면 count를 0으로 다시 초기화한다.
이것이 반복되어 count가 3이라면 6이 연속적으로 3번 나왔다는 말이 되므로 이 때 true를 리턴해준다.
10666 이라면 count가 3이되어 정상적으로 true가 리턴될 것이고
16066 이라면 count가 2에서 다시 0으로 초기화 된 후 1이 될 것이기 때문에 false를 리턴한다.
이 함수를 이용해 true / false 를 리턴받고 위의 main메소드 내의 while문에서
이 수가 666을 포함한 수인가 아닌가를 판별하면 되겠다.
전체 코드를 보면 다음과 같다.
import java.util.Scanner;
public class Back1436 {
public static boolean check(int i) {
int count = 0;
while (i > 0) {
if (i % 10 == 6) {
i = i / 10;
count++;
} else {
i = i / 10;
count = 0;
}
if (count == 3) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
int i = 666;
while (count != n) {
if (check(i)) {
count++;
if (count == n) {
System.out.println(i);
}
}
i++;
}
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #2675 문자열 반복 (0) | 2021.03.19 |
---|---|
[Java] 백준알고리즘 #10809 알파벳 찾기 (0) | 2021.03.19 |
[Java] 백준알고리즘 #2750 수 정렬하기 (0) | 2021.03.17 |
[Java] 백준알고리즘 #1018 체스판 다시 칠하기 (0) | 2021.03.16 |
[Java] 백준알고리즘 #7568 덩치 (0) | 2021.03.15 |