반응형

백준 3004번 체스판 조각 풀이 코드

C | C++ | Java | Python


풀이

최대 조각을 얻기 위해선 계속해서 가로세로 방향을 바꿔가며 잘라야 합니다. 이를 적용하면 아래 규칙을 발견할 수 있습니다.

자르지 않은 통판에서 바로 다음에 얻을 수 있는 조각을 a로 두었을 때 a는 1로 시작합니다(= 첫 번째 한 번 자르면 하나를 추가로 얻습니다). a는 점점 누적되어 커지며, 홀수번째에는 a만큼, 짝수번째에는 a+1만큼 조각을 더 얻을 수 있습니다(이때 a += 1). 코드 자체는 반복문을 홀수인 1부터가 아니라 0부터 시작하게 짰으므로 조건이 반대가 되겠죠.

코드

#include <stdio.h>

int main(){
    int cut, piece = 1, a = 1, i;
    scanf("%d", &cut);
    for(i = 0; i < cut; i++){
        if(i%2 != 0){
            a += 1;
        }
        piece += a;
    }
    printf("%d", piece);
    return 0;
}
#include <iostream>
using namespace std;

int main(){
    int cut, piece = 1, a = 1;
    cin>>cut;
    for(int i = 0; i < cut; i++){
        if(i%2 != 0){
            a += 1;
        }
        piece += a;
    }
    cout<<piece;
    return 0;
}
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int cut = sc.nextInt();
        int piece = 1, a = 1;
        for(int i = 0; i < cut; i++){
            if(i%2 != 0){
                a += 1;
            }
            piece += a;
        }
        System.out.println(piece);
    }
}
cut = int(input())
piece = 1
a = 1
for i in range(cut):
    if i%2 != 0:
        a += 1
    piece += a
print(piece)

문제 출처

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

반응형

+ Recent posts