백준 1364 울타리 치기 코틀린
백준 1364번 울타리 치기
출처 - https://www.acmicpc.net/problem/1364
문제
육각형 블록들로 이루어진 RPG 세계가 있다. 그 세계에 나라를 세우려고 하는 군주 캐릭터 송유진은 일반 블록을 울타리 블록으로 바꿀 수 있는 아이템을 N개 가지고 있다. 유진이가 이 N개의 아이템을 이용해서 점령할 수 있는 최대의 영토의 넓이를 구해보자. 울타리 안에 둘러싸인 블록들은 당연히 넓이에 포함 시키고, 울타리를 세운 블록도 넓이에 포함을 시킨다. 울타리는 항상 이어져 있어야 하며, 맵의 넓이는 무한하다.
입력
첫 줄에는 송유진이 가지고 있는 아이템의 수 N(1≤N≤1,000,000)이 주어진다.
출력
N개의 아이템을 이용하여 점령할 수 있는 최대의 블록 수를 출력한다.
풀이
수학 문제, 특히 도형에 관련된 것은 규칙을 찾는 것이 우선인 것 같다.
이 문제의 경우, 직접 그려보면서 규칙을 찾았다.
1 -> 1 1
2 -> 2 1
3 -> 3 1
4 -> 4 1
5 -> 5 1
6 -> 7 2
7 -> 8 1
8 -> 10 2
9-> 12 2
10 -> 14 2
11 -> 16 2
12-> 19 3
13 -> 21 2
14 -> 24 3
15 -> 27 3
16 -> 30 3
17 -> 33 3
18 -> 37 4
19 -> 40 3
20 -> 44 4
21 -> 48 4
22 -> 52 4
23 -> 56 4
24 -> 61 5
25 -> 65 4
26 -> 70 5
27 -> 75 5
28 -> 80 5
29 -> 85 5
30 -> 91 6
이렇게 정육각형일때 증가량이 1씩 증가하고, 정육각형보다 n이 1 클때는 증가량이 일시적으로 1 감소한다.
그림판을 이용해 그려보면 n이 1 증가할 때마다 가장 큰 변을 바깥쪽으로 옮기고 추가된 1개의 울타리를 이용해 이어주게 되는 것을 알 수 있다.
코드
import java.io.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val n = readLine().toInt()
var answer = 1L
var x = 1L
for(i in 2..n){
if(i%6==0) x++
if(i%6==1) answer--
answer += x
}
println(answer)
}
Author And Source
이 문제에 관하여(백준 1364 울타리 치기 코틀린), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jibmin/백준-1364-울타리-치기-코틀린저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)