티스토리 뷰

문제

 

24040번: 예쁜 케이크

Good Bye BOJ, 2021!이 열리는 오늘, 12월 31일은 종서의 생일이다. $N$ 명의 친구들은 종서에게 생일 선물로 예쁜 케이크를 만들어주려 한다. 여기에서, 예쁜 케이크는 다음과 같은 조건을 만족하는

www.acmicpc.net

Good Bye BOJ, 2021!이 열리는 오늘, 12월 31일은 종서의 생일이다. N명의 친구들은 종서에게 생일 선물로 예쁜 케이크를 만들어주려 한다.

여기에서, 예쁜 케이크는 다음과 같은 조건을 만족하는 케이크를 의미한다.

  1. 케이크는 높이가 1이고, 부피가 N인 직육면체 모양이다.
  2. 케이크를 적절히 칼질해서 한 변의 길이가 1인 정육면체 모양 조각 N개로 나눌 수 있어야 한다.
  3. 케이크의 옆면에 가로 너비가 1인 직사각형을 이어 붙여 만든 띠를 딱 맞게 두를 수 있어야 한다.
  4. 장식용 띠는 가로 폭이 1인 빨간색, 초록색, 하얀색 직사각형이 순서대로 번갈아 가면서 같은 개수만큼 나와야 한다.

예를 들어, 아래 그림은 N = 8인 경우의 예쁜 케이크 중 하나와 그에 사용된 띠를 나타낸다.

아쉽게도 N이 얼마인지에 따라 예쁜 케이크를 만들지 못 할 수도 있다. 종서의 친구들을 위해 부피가 N인 예쁜 케이크를 만들 수 있는지 알려주자.

입력

첫 번째 줄에 전체 테스트 케이스의 개수를 나타내는 정수 T가 주어진다.

이후 T개의 줄에 각각 문제에서 언급한 정수 N이 한 줄에 하나씩 주어진다.

출력

 T개의 줄에 걸쳐 한 줄에 하나씩 문제의 답을 출력해야 한다.

부피가 N 예쁜 케이크를 만들 수 있으면 TAK, 아니면 NIE를 출력한다.


문제 이해하기

# 규칙 찾기 #
부피 1 -> 둘레 (1+1) * 2 = 4       
부피 2 -> 둘레 (1+2) * 2 = 6 -> 둘레를 3의 배수로 만들 수 있음       
부피 3 -> 둘레 (1+3) * 2 = 8       
부피 4 -> 둘레 (1+4) * 2 = 10, (2+2) * 2 = 8       
부피 5 -> 둘레 (1+5) * 2 = 12 -> 둘레를 3의 배수로 만들 수 있음       
부피 6 -> 둘레 (1+6) * 2 = 14, (2+3) * 2 = 10       
부피 7 -> 둘레 (1+7) * 2 = 16       
부피 8 -> 둘레 (1+8) * 2 = 18, (2+4) * 2 = 12 -> 둘레를 3의 배수로 만들 수 있음       
부피 9 -> 둘레 (1+9) * 2 = 20, (3+3) * 2 = 12 -> 둘레를 3의 배수로 만들 수 있음       
부피 10 -> 둘레 (1+10) * 2 = 22, (2+5) * 2 = 14       
부피 11 -> 둘레 (1+11) * 2 = 24 -> 둘레를 3의 배수로 만들 수 있음       
부피 12 -> 둘레 (1+12) * 2 = 26, (2+6) * 2 = 16, (3+4) * 2 = 14       
부피 13 -> 둘레 (1+13) * 2 = 28       
부피 14 -> 둘레 (1+14) * 2 = 30, (2+7) * 2 = 18 -> 둘레를 3의 배수로 만들 수 있음       
부피 15 -> 둘레 (1+15) * 2 = 32, (3+5) * 2 = 16       
부피 16 -> 둘레 (1+16) * 2 = 34, (2+8) * 2 = 20, (4+4) * 2 = 16       
부피 17 -> 둘레 (1+17) * 2 = 36 -> 둘레를 3의 배수로 만들 수 있음       
부피 18 -> 둘레 (1+18) * 2 = 38, (2+9) * 2 = 22, (3+6) * 2 = 18       
부피 19 -> 둘레 (1+19) * 2 = 40       
부피 20 -> 둘레 (1+20) * 2 = 42, (2+10) * 2 = 24, (4+5) * 2 = 18       
부피 21 -> 둘레 (1+21) * 2 = 44, (3+7) * 2 = 20       
부피 22 -> 둘레 (1+22) * 2 = 46, (2+11) * 2 = 26, (4+6) * 2 = 20       
부피 23 -> 둘레 (1+23) * 2 = 48 -> 둘레를 3의 배수로 만들 수 있음       
부피 24 -> 둘레 (1+24) * 2 = 50, (2+12) * 2 = 28, (3+8) * 2 = 22, (4+7) * 2 = 22       
부피 25 -> 둘레 (1+25) * 2 = 52, (5+5) * 2 = 20       
부피 26 -> 둘레 (1+26) * 2 = 54, (2+13) * 2 = 30, (4+8) * 2 = 24       
부피 27 -> 둘레 (1+27) * 2 = 56, (3+9) * 2 = 24
# 규칙 #
1. 부피를 3으로 나누었을 때 나머지가 2인 경우 예쁜 케이크를 만들 수 있음       
2. 부피를 3으로 나누었을 때 나머지가 0이면서 가로와 세로의 길이가 3의 배수인 경우 예쁜 케이크를 만들 수 있음 -> 부피가 9로 나누어 떨어지는 경우

코드

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var (
	scanner = bufio.NewScanner(os.Stdin)
	writer  = bufio.NewWriter(os.Stdout)
	T       int
)

func main() {
	defer writer.Flush()
	scanner.Split(bufio.ScanWords)

	Setup()
	Solve()
}

func Setup() {
	T = scanInt()
}

func Solve() {
	for i := 1; i <= T; i++ {
		n := scanInt()
		if isPrettyCake(n) {
			fmt.Fprintln(writer, "TAK")
		} else {
			fmt.Fprintln(writer, "NIE")
		}
	}
}

func isPrettyCake(n int) bool {
	if n%3 == 2 {
		return true
	}

	if n%9 == 0 {
		return true
	}

	return false
}

func scanString() string {
	scanner.Scan()
	return scanner.Text()
}

func mustParseInt(s string) int {
	n, _ := strconv.Atoi(s)
	return n
}

func scanInt() int {
	return mustParseInt(scanString())
}

시간: 4 ms

메모리: 852 KB

분류: 수학, 정수론

글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
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 31
Total
Today
Yesterday
글 보관함