본문 바로가기
스터디(beakjoon)

Kotlin] 백준 13909번 문제풀이

by 김마리님 2024. 4. 1.

https://www.acmicpc.net/problem/13909

 

13909번: 창문 닫기

서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다.  2번째 사람은 2의 배수 번째

www.acmicpc.net

 

 

더보기

이 문제는 의외로 되게 단순한데,

 

예를 들어

 

1번 창문이면,

1번이 열음

2번 창문이면,

1번이 열음, 2번이 닫음

8번 창문이면,

1번이 열음 / 2번이 닫음 / 4번이 열음 / 8번이 닫음.

9번 창문이면,

1번이 열음 / 3번이 닫음 / 9번이 열음

 

여기까지 봤다면 규칙성이 보인다.

 

창문이 열리려면 반드시 홀수가 되어야 하고, 홀수가 되려면 특정 값의 제곱이 되어야한다.

그 안에 제곱이 몇 개 있는지는 어떻게 알거나면, 받은 사람의 수를 제곱근 하고 소수점을 떼어버리면 해당 수 내부에 제곱근이 몇 개인지 알 수 있으므로 제곱이 몇 개인지 알 수 있다.

예를 들어 문제의 예시인 24개를 제곱하면

4.XXXXXXX

가 나오는데, 

1의 제곱인 1

2의 제곱인 4

3의 제곱인 9

4의 제곱인 16

총 4개의 값이 해당 갯수 안에 존재한다.

 

이를 코드로 쓰면,

import kotlin.math.floor
import kotlin.math.sqrt

fun main(args: Array<String>) {
    question13909()
}

fun question13909() {
    val person = readln().toInt()
    val sqrt = sqrt(person.toDouble())
    val open = floor(sqrt)
    println(open.toInt())
}

 

이렇게 간단한 코드로 끝난다.

반응형