정코딩
Home
  • 분류 전체보기 (421)
    • 알고리즘 (382)
      • Baekjoon (301)
      • SW Academy (39)
      • JUNGOL (7)
      • 프로그래머스 (33)
    • CS (4)
      • 알고리즘 (1)
    • 공부 (19)
      • JAVA (6)
      • BackEnd (4)
      • FrontEnd (3)
      • 프로젝트 (6)
    • 일상 (16)
      • 기타 (16)
Home
  • 분류 전체보기 (421)
    • 알고리즘 (382)
      • Baekjoon (301)
      • SW Academy (39)
      • JUNGOL (7)
      • 프로그래머스 (33)
    • CS (4)
      • 알고리즘 (1)
    • 공부 (19)
      • JAVA (6)
      • BackEnd (4)
      • FrontEnd (3)
      • 프로젝트 (6)
    • 일상 (16)
      • 기타 (16)
블로그 내 검색
Portfolio

정코딩

동의대학교 컴퓨터공학과 SSAFY 6기

  • 알고리즘/Baekjoon

    Baekjoon 1541 잃어버린 괄호 JAVA

    2022. 6. 17.

    by. soonil

     

    1541번: 잃어버린 괄호

    첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

    www.acmicpc.net

    문제

    세준이는 양수와 +, -, 그러고 괄호를 가지고 식을 만들었다. 그러고 나서 세준이는 괄호를 모두 지웠다.

    그러고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

    괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

    조건

    [입력]

    첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.

     

    [출력]

    첫째 줄에 정답을 출력한다.

    풀이

    해당 문제는 연산 식이 주어졌을 때 괄호를 통해 연산을 최소로 만드는 결괏값을 구하는 문제다.

    연산이 + - 연산만 주어지기 때문에 잘 생각해본다면 최솟값을 만들기 위해서는 큰 수를 -연산할수록 최솟값이 만들어진다.

    즉 +연산을 먼저 진행하고 -연산을 수행한다면 최솟값을 구할 수 있다.

    로직은 아래와 같다.

    1. 먼저 입력값을 처리하면서 -기준으로 파싱 한다

    2. -기준으로 파싱 한 값을 +기준으로 파싱 하고 연산한다

        2-1. 이때 최초 1회에 한해서는 값을 저장해준다

        2-2 이후 값들은 모두 - 연산을 한다.

    코드
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    
    	public static void main(String[] args) throws Exception{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer sub = new StringTokenizer(br.readLine(),"-"); // -를 기준으로 자른다
    	
    		boolean first = true; // 첫번째 확인
    		int ans = 0; // 최종 계산값 저장
    		while (sub.hasMoreTokens()) {
    			StringTokenizer add = new StringTokenizer(sub.nextToken(), "+"); // -로 짜른것중에 +로 짤라서 연산
    			
    			int sum = 0;
    			while (add.hasMoreTokens()) {
    				sum += Integer.parseInt(add.nextToken());
    			}
    			
    			if(first) { // 첫번째는 그냥 저장을 해준다 이후 값들에대해선 - 연산
    				ans = sum;
    				first = false;
    			}
    			else
    				ans-=sum;
    		}
    		System.out.println(ans);
    	}
    }

     

     

    GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드

    알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.

    github.com

     

    728x90

    '알고리즘 > Baekjoon' 카테고리의 다른 글

    Baekjoon 1715 카드 정렬하기 JAVA  (0) 2022.06.21
    Baekjoon 2217 로프 JAVA  (0) 2022.06.20
    Baekjoon 16958 텔레포트 JAVA  (0) 2022.06.16
    Baekjoon 21736 헌내기는 친구가 필요해 JAVA  (0) 2022.06.14
    Baekjoon 4577 소코반 JAVA  (0) 2022.06.13

    댓글

    관련글

    • Baekjoon 1715 카드 정렬하기 JAVA 2022.06.21
    • Baekjoon 2217 로프 JAVA 2022.06.20
    • Baekjoon 16958 텔레포트 JAVA 2022.06.16
    • Baekjoon 21736 헌내기는 친구가 필요해 JAVA 2022.06.14
    맨 위로
전체 글 보기
  • Baekjoon
  • Solved
  • Github
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Designed by Nana
블로그 이미지
soonil

티스토리툴바