본문 바로가기

알고리즘(백준 등) 공부/백준(자바)

백준 1364번: 울타리 치기

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

 

육각형 블록으로 이루어진 판에서 육각형 N개로 울타리를 칠 때, 울타리를 포함한 영역의 최대 크기를 구하는 문제이다.

 

N 크기별로 최대 크기의 영역을 그려본 결과, N < 6 구간에서는 울타리 안에 공간을 둘 수 없으므로 영역의 최대 크기는 N이다.

if (n < 6) {
    System.out.print(n);
    return;
}

 

 

N > 6의 경우, 6의 배수에서는 이전의 영역 증가량 +1 만큼, 6의 배수+1 에서는 이전의 영역 증가량 -1 만큼, 6의 배수+2 에서는 이전의 영역 증가량 +1 만큼 영역의 최대 크기가 증가하였다. 이외의 구간에서는 이전의 영역 증가량 만큼 영역이 증가하였으며, 이러한 수열이 나열되는 구조이다.

long answer = 5;
long inc = 1;
for (int i = 6; i <= n; i++) {
    if (i % 6 == 0) {
        answer += ++inc;
    } else if (i % 6 == 1) {
        answer += inc - 1;
    } else {
        answer += inc;
    }
}

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class 울타리치기1364 {
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        br.close();
        if (n < 6) {
            System.out.print(n);
            return;
        }
        long answer = 5;
        long inc = 1;
        for (int i = 6; i <= n; i++) {
            if (i % 6 == 0) {
                answer += ++inc;
            } else if (i % 6 == 1) {
                answer += inc - 1;
            } else {
                answer += inc;
            }
        }
        System.out.print(answer);
    }
}

'알고리즘(백준 등) 공부 > 백준(자바)' 카테고리의 다른 글

백준 1368번: 물대기  (0) 2026.04.11
백준 1365번: 꼬인 전깃줄  (0) 2026.04.10
백준 1361번: 두 스트링 마스크  (0) 2026.04.09
백준 1360번: 되돌리기  (0) 2026.04.08
백준 1359번: 복권  (0) 2026.04.07