본문 바로가기

Algorithm

[백준/DP] 6359 - 만취한 상범

만취한 상범 성공

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 5541 3780 3174 69.483%

문제

서강대학교 곤자가 기숙사의 지하에는 n개의 방이 일렬로 늘어선 감옥이 있다. 각 방에는 벌점을 많이 받은 학생이 구금되어있다.

그러던 어느 날, 감옥 간수인 상범이는 지루한 나머지 정신나간 게임을 하기로 결정했다. 게임의 첫 번째 라운드에서 상범이는 위스키를 한 잔 들이키고, 달려가며 감옥을 한 개씩 모두 연다. 그 다음 라운드에서는 2, 4, 6, ... 번 방을 다시 잠그고, 세 번째 라운드에서는 3, 6, 9, ... 번 방이 열려있으면 잠그고, 잠겨있다면 연다. k번째 라운드에서는 번호가 k의 배수인 방이 열려 있으면 잠그고, 잠겨 있다면 연다. 이렇게 n번째 라운드까지 진행한 이후, 상범이는 위스키의 마지막 병을 마시고 쓰러져 잠든다.

구금되어있는 몇 명(어쩌면 0명)의 학생들은 자신의 방을 잠그지 않은 채 상범이가 쓰러져버렸단 것을 깨닫고 즉시 도망친다.

방의 개수가 주어졌을 때, 몇 명의 학생들이 도주할 수 있는지 알아보자.

입력

입력의 첫 번째 줄에는 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄에 한 개씩 방의 개수 n(5 ≤ n ≤ 100)이 주어진다.

출력

한 줄에 한 개씩 각 테스트 케이스의 답, 즉 몇 명이 탈출할 수 있는지를 출력한다.

예제 입력 1 

2 5 100

예제 출력 1 

2 10

 

 


 

내 소스

문제 번호 결과 메모리 시간 언어 코드 길이
6359 맞았습니다!! 1988 4 C++14  474
#include <iostream>
#include <math.h>

using namespace std;

int main() {
    int i;
    int j;
    int answer[101] = {0,};
    int T;
    
    cin >> T;
    
    for(i=2; i<=10; i++) {
        j = pow(i,2); // i^2
        answer[j] = 100;
    }
    
    j = 1;
    for(i=1; i<101; i++){
        if(answer[i]==100){
            j++;
        }
        answer[i] = j;
    }
    
    for(i=0;i<T;i++){
        cin >> j;
        cout << answer[j] << endl;
    }
    return 0;
}

 

Big-O

시간 복잡도 : O(N)

공간 복잡도 : O(N)

 

'Algorithm' 카테고리의 다른 글

[백준/자료구조] 10866 - 덱  (0) 2019.08.19
[백준/그리디] 2828 - 사과 담기 게임  (0) 2019.08.18
[백준/그리디] 1120 - 문자열  (0) 2019.08.18
[백준/그리디] 5585 - 거스름돈  (0) 2019.08.13
[백준/DP] 2293 - 동전 1  (1) 2019.08.03