728x90
문제
: https://www.acmicpc.net/problem/1436
문제 해석
: 666이 들어간 숫자중 가장 작은 수부터 순차적으로 시리즈번호로 한다.
예시
666 | 1666 | 2666 | ... | 5666 | 6660 | 6661 | ... | 6669 | 7666 |
1 | 2 | 3 | ... | 6 | 7 | 8 | 16 | 17 |
일반적인 코드
: 완전탐색 (브루트 포스)
: 처음부터 1씩 더해주며, 더해준 값에 666이 포함되어있는지 문자열 비교를 하는 방법
: 666이 포함되어 있다면, count+1을 해주며, 입력으로 들어온 숫자와 같은수가 되면 반복 종료
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class no1436 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
Integer title = 666;
int count = 1;
while (count != T) {
title++;
if (String.valueOf(title).contains("666")) count++;
}
System.out.println(title);
}
}
나만의 코드
: 썩 좋은코드는 아니다.
: 모든 수를 전부 더하며 구하기는 것은 비효율 적이라 생각하여 규칙을 비교해봄
규칙1. 666앞에 5가 나온 경우(5666), 다음은 6660으로 변경되어 더해진다.
규칙2. 666뒤에 9가 나온 경우(6669), 다음은 7666으로 변경되어 더해진다.
따라서, 해당 숫자가 확인이 되면, 변경될 숫자로 변환해주었다.
그러나, 값을 변경시켜주는 과정에서 추가적으로 2번의 타입변환이 이루어 지고, 이 과정이 반복되므로,
오히려 부하가 증가하는 결과가 되었다. 따라서 일반적인 브루트포스 공식보다 효율이 좋지 않다.
따라서이런 규칙이 있다 정도만 알고 가는 것이 좋다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class no1436 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
Integer title = 666;
int count = 1;
while (count != T) {
title++;
if (String.valueOf(title).contains("5666")) {
String temp = title.toString();
temp.replace("5666", "6660");
title = Integer.valueOf(temp);
count++;
} else if (String.valueOf(title).contains("6669")) {
String temp = title.toString();
temp.replace("6669", "7666");
title = Integer.valueOf(temp);
count++;
} else if (String.valueOf(title).contains("666")) {
count++;
}
}
System.out.println(title);
}
}
레퍼런스 코드
: 형변환이 없이 숫자로만 계산하는 코드
1. 주어진 수를 10단위로 나누어 한칸씩 당겨옴
2. 이를 10으로 나누어 나머지가 6인 경우를 count
3. 만약 다음 수가 6이 아니면 count 리셋
4. 6이 3연속 나오면(count가 3이되면) 통과
: https://hyospital.tistory.com/50
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
[백준] no1920: 수 찾기 (0) | 2023.01.02 |
---|---|
[백준] no1259: 펠린드롬수 (0) | 2022.12.31 |
[백준] no1874. 스택수열 (0) | 2022.12.30 |
[백준] no1018 체스판 다시 칠하기 (2) | 2022.12.29 |
[Init] Java I/O 기본 방법 (0) | 2022.12.28 |