본문 바로가기
백준

[백준] 알고리즘 분류(문자열,JAVA)7567번, 그릇

by 열정적인 이찬형 2022. 9. 22.

문제 링크

 

7567번: 그릇

그릇을 바닥에 놓았을 때 그 높이는 10cm 이다. 그런데 두 개의 그릇을 같은 방향으로 포개면 그 높이는 5cm만 증가된다. 만일 그릇이 서로 반대방향으로 쌓이면 높이는 그릇만큼, 즉 10cm 늘어난다.

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

이 문제에 핵심

 

1. 그릇에 높이는 10cm입니다.

2. 그릇을 쌓아올리면 +5cm, 그릇을 반대방향으로 쌓으면 +10cm 높이가 올라갑니다.

3. 입력받은 그릇을 순서대로 쌓았을 때 높이를 결과로 출력합니다.

 

알고리즘 진행 순서.

 

1. 입력된 그릇의 정보를 저장합니다.

 

2. 그릇을 순서대로 쌓아오는 과정을 진행합니다.

 

3. 쌓은 과정을 종료한 뒤 높이를 결과로 출력합니다.

 

그릇 쌓기

 

이전에 쌓인 그릇의 형태에 따라 높이를 더합니다.

 

현재 쌓으려는 그릇 = 이전 쌓은 그릇

+5cm

 

현재 쌓으려는 그릇 != 이전 쌓은 그릇

+10cm

 

 

예제입력 2.

 

1. 입력된 그릇의 정보를 저장합니다.

 

()()()))(

※첫 번째 그릇은 이전 그릇이 없기 때문에 무조건 10cm의 높이로 쌓아집니다.

 

2. 그릇을 순서대로 쌓아오는 과정을 진행합니다.

 

이전 그릇 : 없음

( : 10cm

 

이전 그릇 : (

() : 10 + 10

 

이전 그릇 : ()

( : 10 + 10 + 10

 

이전 그릇 : ()(

) : 10 + 10 + 10 + 10

 

이전 그릇 : ()()

( : 10 + 10 + 10 + 10 + 10

 

이전 그릇 : ()()(

) : 10 + 10 + 10 + 10 + 10 + 10

 

이전 그릇 : ()()()

) : 10 + 10 + 10 + 10 + 10 + 10 + 5

 

이전 그릇 : ()()())

) : 10 + 10 + 10 + 10 + 10 + 10 + 5 + 5

 

이전 그릇 : ()()()))

( : 10 + 10 + 10 + 10 + 10 + 10 + 5 + 5 + 10

 

3. 쌓은 과정을 종료한 뒤 높이를 결과로 출력합니다.

 

10 + 10 + 10 + 10 + 10 + 10 + 5 + 5 + 10 = 80

80을 결과로 출력합니다.

 

 

  • BufferedReader를 사용하여 입력되는 정보를 저장합니다.
  • for문을 통해서 그릇을 쌓는 과정을 진행합니다.
  • 그릇을 쌓는 과정 종료 후 높이를 결과를 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedaWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String input = br.readLine();	//입력되는 그릇 정보 저장
        //첫 번째 그릇 높이 놓기
        int answer = 10;
        char previous = input.charAt(0);
        //그릇을 쌓는 과정 진행
        for(int i=1;i<input.length();i++){
            //이전과 동일하지 않은 그릇을 쌓을 때
            if(previous != input.charAt(i)){
                previous = input.charAt(i);
                answer += 10;
            }else		//이전과 동일한 그릇을 쌓을 때
                answer += 5;
        }
        bw.write(answer + "");	//그릇을 쌓은 높이 BufferedWriter 저장
        bw.flush();		//결과 출력
        bw.close();
        br.close();
    }
}

댓글