코드

import java.util.*;
//후위연산
class 후위연산_ {	
	public static void main(String[] args){
		String str = "573*+5-323*++";
		int answer=0;
		Stack<Integer> stack = new Stack<Integer>();
		
		for(char cha : str.toCharArray()) {
			int lt = 0;
			int rt = 0;
			if(!Character.isDigit(cha)) {
//			if(cha =='+'||cha =='-'||cha =='/'||cha =='*') {
				rt = stack.pop();
				lt = stack.pop();
				answer = cha=='+'? Integer.sum(lt, rt) 
						:cha=='-'? Math.subtractExact(lt, rt)
						:cha=='/'? Math.floorDiv(lt, rt) 
								 : Math.multiplyExact(lt, rt);
				stack.push(answer);
			}else {
				System.out.println("char:"+cha + " char아스키:"+ Integer.valueOf(cha));
				stack.push(cha-'0');
				// char형 숫자에 '0'을 빼면 우리가 생각하는 숫자(int)가 된다.
				// -48도 가능하다.
			}
		}
		System.out.println("char: 0 char아스키:"+ Integer.valueOf('0'));
		System.out.println(answer);
	}
}

결과

char:5 char아스키:53
char:7 char아스키:55
char:3 char아스키:51
char:5 char아스키:53
char:3 char아스키:51
char:2 char아스키:50
char:3 char아스키:51
char: 0 char아스키:48
30

 

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

삽입정렬  (0) 2022.12.03
선택정렬  (0) 2022.12.02
모든 아나그램 찾기  (0) 2022.11.30
K번째 큰 수  (0) 2022.11.27
연속된 자연수의 합  (0) 2022.11.25

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

코드

import java.util.Stack;

class Solution {
	boolean solution(String s) {
		Stack<Character> stack = new Stack<Character>();
		try {
			for (char cha : s.toCharArray()) {
				if (cha == '(')
					stack.add(cha);
				else { //문자열은 '(' , ')' 밖에 없기 때문에 이 조건식
					stack.pop();
				}
			}
		} catch (Exception e) {
			return false; // 예외발생은 pop()에서 날 것 즉, 짝이 안맞는다.
		}
		return stack.empty() ? true : false;
	}
}

결과

정확성  테스트
테스트 1 〉	통과 (0.17ms, 76.7MB)
테스트 2 〉	통과 (0.20ms, 81.6MB)
테스트 3 〉	통과 (0.19ms, 79MB)
테스트 4 〉	통과 (0.22ms, 79MB)
테스트 5 〉	통과 (0.27ms, 76.4MB)
테스트 6 〉	통과 (0.14ms, 77.1MB)
테스트 7 〉	통과 (0.24ms, 78.2MB)
테스트 8 〉	통과 (0.20ms, 75.6MB)
테스트 9 〉	통과 (0.25ms, 72.8MB)
테스트 10 〉	통과 (0.25ms, 75MB)
테스트 11 〉	통과 (0.20ms, 72.4MB)
테스트 12 〉	통과 (0.22ms, 75.1MB)
테스트 13 〉	통과 (0.30ms, 75.5MB)
테스트 14 〉	통과 (0.24ms, 73.4MB)
테스트 15 〉	통과 (0.21ms, 75.4MB)
테스트 16 〉	통과 (0.22ms, 99.7MB)
테스트 17 〉	통과 (0.21ms, 74.8MB)
테스트 18 〉	통과 (0.25ms, 68MB)
효율성  테스트
테스트 1 〉	통과 (15.83ms, 53.8MB)
테스트 2 〉	통과 (14.89ms, 53.1MB)
채점 결과
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0

 


예제에서 s 문자열은 '(', ')'만 존재한다고 했다. 

만약 여러 문자열이 섞여있다면 else if로 변경만 하면 될 것이다.

'자료구조&알고리즘 > Level1' 카테고리의 다른 글

성격 유형 검사하기  (0) 2022.09.26
신고 결과 받기  (0) 2022.09.24
크레인 인형뽑기 게임  (1) 2022.09.21
신규 아이디 추천  (0) 2022.09.18
성격 유형 검사하기  (0) 2022.09.17

+ Recent posts