[BOJ] 10799번 (쇠막대기)

yoonheekim·2022년 10월 26일
0

BOJ

목록 보기
1/1

문제 링크

10799번

문제 접근

  • stack의 구조 이해하기
  • Scanner로 문자열 입력
  • 입력받은 문자열의 길이만큼 반복문 실행하기
  • 조건문으로 pop/push/결과값 연산 다루기

추가로 공부한 내용

//1. Stack 클래스 선언 방법
Stack<String> stack = new Stack<>(); 

//2. Scannner은 char타입으로 입력받을 수 없다. 따라서 String 타입으로 입력받고 이를 CharAt으로 변환해야 한다. 
// 저장된 문자열 중에서 한 글자만 선택해서 char타입으로 변환해주는 메소드
// index : 문자열의 순서값 (0~n번째)
CharAt(index);  

시행착오

  • String index out of range: 22 라고 떠서 검색해보니 지정한 값에서 벗어나면 뜨는 오류라고 한다. for문에서 조건식이 맞지 않아 생긴 오류였다.
// 오류 코드
package algorithm;

import java.util.Scanner;
import java.util.Stack;

public class Problem_Stack_10799 {

	public static void main(String[] args) {
		Stack<Character> stack = new Stack<Character>();
		Scanner key = new Scanner(System.in);
		String str = key.next();
		int size = str.length();
		int result = 0;
		for(int i=0; i<=size;i++) {		//for문이 0~size번 돌고있어서 오류
			if(str.charAt(i)=='(') {	//오류 발생 지점 
				stack.push('(');
			}else {
				stack.pop();
				if(str.charAt(i-1)=='(') {
				 result = result+stack.size();
				}else {
					result++;
				}
			}
		}
		System.err.println(result);
	}

}

=> 자바에서의 문자열의 길이는 0번부터 n-1이기 때문에 위 조건에서 size번째에 해당하는 문자열은 존재하지 않는다. 존재하지 않는 size번째 문자열의 조건을 수행할 수 없기 때문에 해당 오류가 일어났다. 따라서 int i=0; i<size; i++ 로 수정하여 오류를 해결할 수 있었던 것이다.

코드


package algorithm;

import java.util.Scanner;
import java.util.Stack;

public class Problem_Stack_10799 {

	public static void main(String[] args) {
		Stack<Character> stack = new Stack<Character>();
		Scanner key = new Scanner(System.in);
		String str = key.next();
		int size = str.length();
		int result = 0;
		for(int i=0; i<size;i++) {			
			if(str.charAt(i)=='(') {		
				stack.push('(');
			}else {
				stack.pop();
				if(str.charAt(i-1)=='(') {
				 result = result+stack.size();
				}else {
					result++;
				}
			}
		}
		System.err.println(result);
	}

}

느낀점

API를 잘 알고 있어야겠다. 틈틈히 오라클 API 들어가서 자주 쓰는 클래스들을 읽어놓자.

profile
개발 걸음마 떼기 👩🏻‍💻

0개의 댓글