🌷🌼λͺ¨μ—¬λ΄μš” 개발의숲🌷🌼

[JAVA/μ½”λ”©ν…ŒμŠ€νŠΈ] μ‡ λ§‰λŒ€κΈ° λ³Έλ¬Έ

개발/μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν’€μ΄ JAVA

[JAVA/μ½”λ”©ν…ŒμŠ€νŠΈ] μ‡ λ§‰λŒ€κΈ°

μš”μΌμ΄ 2021. 6. 12. 15:25
λ°˜μ‘ν˜•

μ„€λͺ…

μ—¬λŸ¬ 개의 μ‡ λ§‰λŒ€κΈ°λ₯Ό λ ˆμ΄μ €λ‘œ μ ˆλ‹¨ν•˜λ €κ³  ν•œλ‹€. 효율적인 μž‘μ—…μ„ μœ„ν•΄μ„œ μ‡ λ§‰λŒ€κΈ°λ₯Ό μ•„λž˜μ—μ„œ μœ„λ‘œ 겹쳐 놓고,

λ ˆμ΄μ €λ₯Ό μœ„μ—μ„œ 수직으둜 λ°œμ‚¬ν•˜μ—¬ μ‡ λ§‰λŒ€κΈ°λ“€μ„ 자λ₯Έλ‹€. μ‡ λ§‰λŒ€κΈ°μ™€ λ ˆμ΄μ €μ˜ λ°°μΉ˜λŠ” λ‹€μŒ 쑰건을 λ§Œμ‘±ν•œλ‹€.

• μ‡ λ§‰λŒ€κΈ°λŠ” μžμ‹ λ³΄λ‹€ κΈ΄ μ‡ λ§‰λŒ€κΈ° μœ„μ—λ§Œ 놓일 수 μžˆλ‹€. - μ‡ λ§‰λŒ€κΈ°λ₯Ό λ‹€λ₯Έ μ‡ λ§‰λŒ€κΈ° μœ„μ— λ†“λŠ” 경우 μ™„μ „νžˆ ν¬ν•¨λ˜λ„λ‘ λ†“λ˜,

끝점은 κ²ΉμΉ˜μ§€ μ•Šλ„λ‘ λ†“λŠ”λ‹€.

• 각 μ‡ λ§‰λŒ€κΈ°λ₯Ό 자λ₯΄λŠ” λ ˆμ΄μ €λŠ” 적어도 ν•˜λ‚˜ μ‘΄μž¬ν•œλ‹€.

• λ ˆμ΄μ €λŠ” μ–΄λ–€ μ‡ λ§‰λŒ€κΈ°μ˜ μ–‘ 끝점과도 κ²ΉμΉ˜μ§€ μ•ŠλŠ”λ‹€.

μ•„λž˜ 그림은 μœ„ 쑰건을 λ§Œμ‘±ν•˜λŠ” 예λ₯Ό 보여쀀닀. μˆ˜ν‰μœΌλ‘œ 그렀진 ꡡ은 싀선은 μ‡ λ§‰λŒ€κΈ°μ΄κ³ , 점은 λ ˆμ΄μ €μ˜ μœ„μΉ˜,

수직으둜 그렀진 점선 ν™”μ‚΄ν‘œλŠ” λ ˆμ΄μ €μ˜ λ°œμ‚¬ λ°©ν–₯이닀.

μ΄λŸ¬ν•œ λ ˆμ΄μ €μ™€ μ‡ λ§‰λŒ€κΈ°μ˜ λ°°μΉ˜λŠ” λ‹€μŒκ³Ό 같이 κ΄„ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ μ™Όμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

1. λ ˆμ΄μ €λŠ” μ—¬λŠ” κ΄„ν˜Έμ™€ λ‹«λŠ” κ΄„ν˜Έμ˜ μΈμ ‘ν•œ 쌍 ‘( ) ’ 으둜 ν‘œν˜„λœλ‹€. λ˜ν•œ, λͺ¨λ“  ‘( ) ’λŠ” 반 λ“œμ‹œ λ ˆμ΄μ €λ₯Ό ν‘œν˜„ν•œλ‹€.

2. μ‡ λ§‰λŒ€κΈ°μ˜ μ™Όμͺ½ 끝은 μ—¬λŠ” κ΄„ν˜Έ ‘ ( ’ 둜, 였λ₯Έμͺ½ 끝은 λ‹«νžŒ κ΄„ν˜Έ ‘) ’ 둜 ν‘œν˜„λœλ‹€.

μœ„ 예의 κ΄„ν˜Έ ν‘œν˜„μ€ κ·Έλ¦Ό μœ„μ— μ£Όμ–΄μ Έ μžˆλ‹€.

μ‡ λ§‰λŒ€κΈ°λŠ” λ ˆμ΄μ €μ— μ˜ν•΄ λͺ‡ 개의 쑰각으둜 μž˜λ €μ§€λŠ”λ°, μœ„ μ˜ˆμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” 두 개의 μ‡ λ§‰λŒ€κΈ°λŠ” 각각 3κ°œμ™€ 2개의 쑰각으둜 μž˜λ €μ§€κ³ ,

이와 같은 λ°©μ‹μœΌλ‘œ 주어진 μ‡ λ§‰λŒ€κΈ°λ“€μ€ 총 17개의 쑰각으둜 μž˜λ €μ§„λ‹€.

μ‡ λ§‰λŒ€κΈ°μ™€ λ ˆμ΄μ €μ˜ 배치λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ΄„ν˜Έ ν‘œν˜„μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, μž˜λ €μ§„ μ‡ λ§‰λŒ€κΈ° 쑰각의 총 개수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯ 좜λ ₯
ν•œ 쀄에 μ‡ λ§‰λŒ€κΈ°μ™€ λ ˆμ΄μ €μ˜ 배치λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ΄„ν˜Έ ν‘œν˜„μ΄ 곡백없이 주어진닀. κ΄„ν˜Έ 문자의 κ°œμˆ˜λŠ” μ΅œλŒ€ 100,000이닀. μž˜λ €μ§„ 쑰각의 총 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜λ₯Ό ν•œ 쀄에 좜λ ₯ν•œλ‹€.
μ˜ˆμ‹œ μž…λ ₯1 μ˜ˆμ‹œ 좜λ ₯1
()(((()())(())()))(()) 17
μ˜ˆμ‹œ μž…λ ₯2 μ˜ˆμ‹œ 좜λ ₯2
(((()(()()))(())()))(()()) 24
import java.util.*;

public class Main {
	
	public void solution(String str) {
	
		// κ²°κ³Ό
		int result = 0;
		// μ‡  λ§‰λŒ€κΈ° 수 
		int count = 0;
		
		Stack <Character> stack = new Stack<>();
		
		for(char x : str.toCharArray()) {
			
			if(x == '(') {
				count += 1;
				stack.push(x); 
			}else {
				count -= 1;
				// λ ˆμ΄μ €
				if(stack.peek() == '(') {
					result += count;
				// 길이가 λλ‚¬μ„λ•Œ
				}else {
					result += 1;
				}
				stack.push(x); 
			}
		}
		
		System.out.println(result);
		
	}
	
	public static void main(String args[]) {
        Main main = new Main();
		
        Scanner in= new Scanner(System.in);
        
		String str = in.nextLine();
		
        main.solution(str);
    }

}
Comments