티스토리 뷰
문제
Good Bye BOJ, 2021!이 열리는 오늘, 12월 31일은 종서의 생일이다. N명의 친구들은 종서에게 생일 선물로 예쁜 케이크를 만들어주려 한다.
여기에서, 예쁜 케이크는 다음과 같은 조건을 만족하는 케이크를 의미한다.
- 케이크는 높이가 1 이고, 부피가 N인 직육면체 모양이다.
- 케이크를 적절히 칼질해서 한 변의 길이가 1인 정육면체 모양 조각 N개로 나눌 수 있어야 한다.
- 케이크의 옆면에 가로 너비가 1인 직사각형을 이어 붙여 만든 띠를 딱 맞게 두를 수 있어야 한다.
- 장식용 띠는 가로 폭이 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
분류: 수학, 정수론
글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
'Go > 문제 풀이' 카테고리의 다른 글
[백준 / Go] 23324번: 어려운 모든 정점 쌍 최단 거리 (0) | 2024.04.14 |
---|---|
[백준 / Go] 1124번: 언더프라임 (0) | 2023.10.30 |
[백준 / Go] 21920번: 서로소 평균 (0) | 2023.10.20 |
[백준 / Go] 11815번: 짝수? 홀수? (1) | 2023.10.19 |
[백준 / Go] 9417번: 최대 GCD (1) | 2023.10.14 |