[1436] 영화감독 숌

hellonayeon·2021년 10월 25일
2

📖 문제

✏️ 풀이과정

666

1666  2666  ... 6666  ... 9666

10666 11666 ... 16666 ... 19666
16660 16661 ...           16669

1. 16666 제외 5자릿수 숫자에서는 666 까지만 가능
2. 666의 위치를 666 & 6660 으로 옮길 수 있는 경우의 수 계산

처음에는 규칙성 을 찾으려 했으나 실패! 숫자들의 자릿수별로 666 이 몇번 나올 수 있고, 자리를 어떻게 이동시킬 수 있는지 생각해봤다. 하지만 여기서 한가지 간과한게 있었다. 666 의 자리를 옮길 경우 16666 보다 16661 이 먼저 나와야한다는 점을 고려하지 못했다. 이 부분을 생각하지 않고 코드를 작성했더니 예시 입출력 테스트 케이스도 통과 못하길래 숫자를 하나씩 증가해가며 666이 포함되어있는지 확인하는 방법 으로 풀었다.

❌ 풀이방법1

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int cnt = 0;
        int num = 0;
        while(cnt != N) {
            num++;
            if(String.valueOf(num).matches(".*666.*")) cnt++;
        }

        System.out.println(num);
    }
}

메모리 초과 에 무척 당황했다. 틀렸습니다 런타임 에러 컴파일 에러 는 자주 봤는데 메모리 초과 라니... 결국 구글링을 했고, contains() 함수로 수정함으로써 정답처리를 받을 수 있었다.

⭕️ 풀이방법2

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int cnt = 1;
        int num = 666;

        while(cnt != N) {
            if(String.valueOf(++num).contains("666")) cnt++;
        }

        System.out.println(num);
    }
}

String.valueOf() 함수로 String 객체를 계속 만들어서 문제일까 유추해봤으나, 답안을 보니 근본적인 이유가 아닌것 같아 클래스를 타고들어가 확인해봤다. String.valueOf().matches() 구문 실행으로 String Integer Pattern Matches 생각보다 많은 객체들이 생성되고 있었다!

  String.valueOf()  

String.class

Integer.class


  String.matches()  

String.class

Pattern.class

📌 참고자료

[백준] 1436번 : 영화감독 숌 - JAVA [자바]

👩🏻‍💻 생각정리

생성된 객체가 어떻게 관리되는지 Garbage Collector String 객체의 특징 Wrapper 클래스 등등 키워드만 떠오르지 내용은 모르겠다. 자바 라는 언어에 대해서 생각보다 많이 모른다는 것을 이 문제를 통해 깨달았다. 슬프지만 이제라도 알아서 다행이니까 열심히 공부해야지..😢

2개의 댓글

comment-user-thumbnail
2021년 10월 25일

1개의 답글