Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 객체
- ar vr 차이
- 안드로이드 라이선스
- 서비스 쓰레드 차이
- 안드로이드 os 구조
- 큐 자바 코드
- android ar 개발
- 안드로이드 라이선스 종류
- 스택 자바 코드
- 서비스 vs 쓰레드
- 클래스
- jvm이란
- 안드로이드 레트로핏 사용법
- ANR이란
- rxjava disposable
- 2022 플러터 설치
- Rxjava Observable
- rxjava cold observable
- android retrofit login
- jvm 작동 원리
- 멤버변수
- 안드로이드 유닛 테스트 예시
- 자바 다형성
- rxjava hot observable
- 안드로이드 레트로핏 crud
- 안드로이드 유닛 테스트
- 안드로이드 유닛테스트란
- 2022 플러터 안드로이드 스튜디오
- 스택 큐 차이
- 플러터 설치 2022
Archives
- Today
- Total
나만을 위한 블로그
[Algorithm] 백준 - 벌집 (2292) (Kotlin) 본문
728x90
반응형
1을 포함한 벌집은 6개의 벌집이 감싸고, 그 밖의 벌집은 12개가 감싼다. 즉 벌집의 방들을 계층화하면 아래와 같다고 볼 수 있다.
- 1층 : 중앙 1개의 방
- 2층 : 방 6개(2~7)
- 3층 : 방 12개(8~19)
- 4층 : 방 18개(20~37)
이런 식으로 n층의 방은 몇 개인지 구하려면 6n으로 구할 수 있다. 이를 바탕으로 주어진 숫자가 어떤 층에 속하는지 알면 최소 방의 개수를 몇 개나 지나야 하는지 알 수 있다.
fun main() {
val N = readln().toInt()
if (N == 1) {
println(1)
return
}
var layer = 1
var maxRoomInLayer = 1
while (N > maxRoomInLayer) {
layer++
maxRoomInLayer += 6 * (layer - 1)
}
println(layer)
}
1을 입력받았을 경우의 예외처리를 앞에 추가하고 이후 층, 최대 방 개수를 담을 변수를 선언해 둔다.
그리고 반복문을 써서 입력받은 숫자가 최대 방 개수보다 큰 동안 반복한다는 조건을 추가하고, 층을 1개씩 추가하면서 최대 방 개수를 6(n-1)로 업데이트한다.
왜 6(n-1)을 써야 하는가? 만약 6n을 그대로 쓰면 1층의 방 개수는 6개가 되어 버린다. 문제에선 1층의 방 개수는 1개라고 그림으로 표시하고 있고, 2층 이상부턴 6의 배수로 증가하기 때문에 n-1을 해야 1층을 제외하고 올바른 방 개수를 구할 수 있다.
이렇게 반복하다가 언젠간 N이 최대 방 개수보다 작아지는 순간이 온다. 그럼 무한 while문을 탈출해서 이 때의 층수를 출력하면 문제를 풀 수 있다.
반응형
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[Algorithm] 백준 - 블랙잭 (2798) (Kotlin) (0) | 2024.09.23 |
---|---|
[Algorithm] 백준 - 소수 찾기 (2231) (Kotlin) (0) | 2024.09.23 |
[Algorithm] 백준 - 소수 찾기 (1978) (Kotlin) (0) | 2024.09.19 |
[Algorithm] 백준 - 웰컴 키트 (30802) (Kotlin) (0) | 2024.09.19 |
[Algorithm] 백준 - 직각삼각형 (4153) (Kotlin) (0) | 2024.09.19 |
Comments