#1 알고리즘
1번 if문과 2번 if문을 병렬로 두는 코드보다, 2번 if문을 1번 if문 안에 넣는 코드가 더 빠르다. 왜냐하면, contains666Count가 갱신되지 않았다면, targetCount와 비교한 결과 또한 갱신되지 않을 것이기 때문이다. contains666Count가 변해야, 2번 if문에 의미가 생긴다.
#2 코드
#2-1 자바
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int targetCount = sc.nextInt();
sc.close();
int contains666Count = 0;
// 범위 1 ~ 6660000에는 "666 패턴"을 만족하는 자연수 N이, 적어도 1만개 이상 있을 것이다
for(int i = 1; i <= 6660000; i++) {
if(Integer.toString(i).contains("666")) {
contains666Count++;
if(contains666Count == targetCount) {
System.out.println(Integer.toString(i));
return;
}
}
}
}
}
#2-2 코틀린
fun main() {
val targetCount = readLine()!!.trim().toInt()
var contains666Count = 0
// 범위 1 ~ 6660000에는 "666 패턴"을 만족하는 자연수 N이, 적어도 1만개 이상 있을 것이다
for(i : Int in 1..6660000) {
if(i.toString().contains("666")) {
contains666Count++
if(contains666Count == targetCount) {
println(i.toString())
return
}
}
}
}
#3 실패한 코드 - 시간 초과 - 자바
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int targetCount = sc.nextInt();
sc.close();
int contains666Count = 0;
// 범위 1 ~ 6660000에는 "666 패턴"을 만족하는 자연수 N이, 적어도 1만개 이상 있을 것이다
for(int i = 1; i <= 6660000; i++) {
System.out.println("now: " + Integer.toString(i));
if(isContains666(i)) {
contains666Count++;
if(contains666Count == targetCount) {
System.out.println(Integer.toString(i));
return;
}
}
}
}
public static boolean isContains666(int parameterNumber) {
int[] digits = makeToIntArray(parameterNumber);
int n = digits.length;
if(n < 3) {
return false;
}
for(int i = 0; i <= n - 3; n++) {
if((digits[i] == 6) && (digits[i+1] == 6) && (digits[i+2] == 6)) {
return true;
}
}
return false;
}
public static int[] makeToIntArray(int parameterNumber) {
String baseString = Integer.toString(parameterNumber);
int[] digits = new int[baseString.length()];
for(int i = 0; i < baseString.length(); i++) {
digits[i] = Character.getNumericValue(baseString.charAt(i)) ;
}
return digits;
}
}
1436번 문제는 String 클래스의 메소드 contains() 하나로 너무 쉽게 풀리는 문제다. 그래서 contains()를 쓰지 않고 내가 직접 하나하나 비교해보고 싶었다. 하지만, 속도가 너무 느렸다.
'문제 풀이 > 기타' 카테고리의 다른 글
[백준] 2231 (분해합) (0) | 2023.11.09 |
---|---|
[백준] 1978 (소수 찾기) (0) | 2023.11.08 |
[백준] 1157 (단어 공부) (0) | 2023.10.31 |
[백준] 1018 (체스판 다시 칠하기) (0) | 2023.10.27 |
[백준] 1002 (터렛) (0) | 2023.10.25 |