코딩항해기

[코드업] 4833 : 쇠 막대기 (JAVA) 본문

problem solving/코딩 테스트

[코드업] 4833 : 쇠 막대기 (JAVA)

miniBcake 2024. 11. 19. 17:22

 

 

 

 

쇠 막대기

(초등 3)(중등 2) 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위 로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하 여 쇠막대기들을 자른다. 쇠

codeup.kr

 

 

 

import java.util.ArrayList;
import java.util.Scanner;

public class test3 {
    public static void main(String[] args) {
        //(는 층을 쌓기 때문에 스택을 올린다
        //()는 레이저이므로 스택 쌓은만큼 수가 추가된다
        //)끝나는 것이므로 스택을 하나 내리면서 수를 1추가한다

        //String[] arr = {"(",")","(","(","(","(",")","(",")",")","(","(",")",")","(",")",")",")","(","(",")",")"};
        Scanner sc = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>(); //입력값을 저장할 공간
        int stack = 0; //층수를 계산할 스택 변수
        int sum = 0; //막대 개수 연산할 변수

        while (true){
            System.out.print("0을 입력하면 입력을 종료합니다. : ");
            String res = sc.next();
            //종료조건
            if(res.equals("0")){
                break;
            }
            //종료가 아니라면 입력 저장
            list.add(res);
        }

        long startTime = System.currentTimeMillis(); // 시작 시간 저장

        for(int i=0; i<list.size(); i++) {
            if(list.get(i).equals("(")) { //(만 있을 수 없으므로 배열초과 trycatch생략
                //만약 (인데 다음이 )아니라면 => 레이저가 아님
                //만약 (인데 다음이 )이라면 => 레이저임
                if(list.get(i+1).equals(")")) {
                    System.out.println("레이저 핑-!");
                    //레이저
                    sum += stack; //쌓인 막대 개수만큼 개수 추가
                    i++; //레이저용 닫기 패스
                }
                else {
                    //레이저가 아닌 층 쌓기
                    System.out.println("막대기 추가");
                    stack++; //층 추가
                }
            }
            else if(list.get(i).equals(")")) {
                System.out.println("막대기 끝부분");
                //만약 막대 끝이라면
                //스택을 하나 빼고 개수를 하나 추가
                stack--;
                sum++;
            }
            //() 둘다 아니라면 아무것도 하지 않음
            System.out.println("현재 막대기 층 : "+stack);
        }
        System.out.println("--------------------------------");
        System.out.println("총 막대 개수는 : "+sum+"개 입니다.");

        long endTime = System.currentTimeMillis(); // 종료 시간 저장
        System.out.println("실행시간: " + (endTime - startTime) + "ms"); // 밀리초 단위로 출력
    }
}