반응형

1. 문제 번호 2292번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 규칙을 찾는것은 너무도 쉬웠지만, 시간초과의 문제가 발생하여 앞으로는 시간복잡도,공간복잡도를 고려를 해야 한다.

 

 

 

문제를 먼저 정확히 파악

 

  • 아래의 표를 보면 뭔가 6의 배수와 연관이 깊다는것을 쉽게 눈치챔
// 반복횟수 | 첫 번째 시작~종료 | 이전시작과의 차이 | 범위안의 개수 
// 0      | 1            | 0            | 0 
// 1      | 2~7          | 1            | 6
// 2      | 8~19         | 6            | 12
// 3      | 20~37        | 12           | 18
// 4      | 38~61        | 18           | 24

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

  1. Math.pow(6,i) 를 사용하고자 하였다.
    하지만 속도의 이슈가 있었다.
    단순히 사칙연산으로도 풀 수 있는 문제였고, 이전 문제의 수학함수를 사용해서 풀어보고 싶었다.

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
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 nRoom = 1;

        if (N == 1){
            System.out.println(nRoom);
            return;
        }
        
        int rangeStart = 2;
        int rangeEnd = 7;

        while(true){
            nRoom++;
            if ( N >= rangeStart && N <= rangeEnd ){
                System.out.println(nRoom);
                break;
            }
            rangeStart = rangeEnd + 1;
            rangeEnd = rangeEnd + (6 * nRoom);
        }
    }
}

 

 

 

 

 

- 실패 소스코드 -

 

더보기
import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
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 startValue = 1;
        int endValue = 1;
        int nRoom = 1;

        if(N != 1){
            for(int i = 0; ; i++){
                startValue = startValue + (int)Math.pow(6,i);
                endValue = startValue + (int)Math.pow(6,i) - 1;
        
                if ( N >= startValue && N <= endValue ){
                    nRoom++;
                    break;
                };
            }
        }
        System.out.println(nRoom);
        
        // 반복횟수 | 첫 번째 시작~종료 | 이전시작과의 차이 | 범위안의 개수 
        // 0      | 1            | 0            | 0 
        // 1      | 2~7          | 1            | 6
        // 2      | 8~19         | 6            | 12
        // 3      | 20~37        | 12           | 18
        // 4      | 38~61        | 18           | 24
    }
}

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 



728x90
반응형

+ Recent posts