백준 생장점

KIMYEONGJUN·2024년 10월 4일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

입력의 각 줄은 하나의 branchorama 나무를 의미합니다.
각 줄은 나무의 나이 a(1 ≤ a ≤ 20)로 시작하며,
그 뒤로 2a 개의 정수가 공백을 두고 주어집니다.
2a 개의 정수는 splitting factor와 가지치기 한 가지의 수가 level 별로 나열된 것입니다.
마지막 줄로  '0'이 주어지며 더 이상의 입력은 없습니다. '0'은 처리하지 않습니다.
각 나무에 대하여 나무에 달려있는 잎의 수를 한 줄씩 출력하세요.
나뭇잎의 수가 signed 32-bit integer를 초과하지 않는다고 가정해도 좋습니다.

내가 이 문제를 보고 생각해본 부분

while문으로 무한반복을 해주고 0이 입력되었을 떄는 반복문이 종료된다.
가지는 한 가지에서 입력 수 만큼 뻗어나온다.
그렇다면 뻗어나온 종 가짓수는 (기존 가짓수) * (한 가지 당 뻗어나오는 가짓 수) 이다.
가지 치기는 그대로 빼주면 된다.

코드로 구현

package baekjoon.baekjoon_23;

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

// 백준 1703번 문제
public class Main796 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //입력 제한을 정하지 않았기 때문에 무한루프
        while(true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            //tree는 가짓수. 초기값이 1인 이유는 가지는 무조건 처음에 1개가 있기 때문이다.
            int tree = 1;

            //0이 입력되면 반복문 종료
            if(N == 0) {
                break;
            }

            for(int i = 0; i < 2 * N; i++) {
                int M = Integer.parseInt(st.nextToken());
                //나란히 뻗어나오는 가지와 가지치기 수가 입력되기 때문에 입력되는 때에 맞는 연산을 진행
                if(i % 2 == 0) {
                    tree *= M;
                } else {
                    tree -= M;
                }
            }
            System.out.println(tree);
        }
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글