๐Ÿฅ‡ [Baekjoon / Java] 2504. ๊ด„ํ˜ธ์˜ ๊ฐ’

์ดํ•˜์–€ยท2024๋…„ 5์›” 31์ผ
0

๐Ÿฃ ๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
16/33

๋ฌธ์ œ ์„ค๋ช…


๐Ÿ’ก Info

๋‚ด์šฉ

4๊ฐœ์˜ ๊ธฐํ˜ธ โ€˜(โ€™, โ€˜)โ€™, โ€˜[โ€™, โ€˜]โ€™๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ด„ํ˜ธ์—ด ์ค‘์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค.

  1. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ โ€˜()โ€™์™€ โ€˜[]โ€™๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋‹ค.
  2. ๋งŒ์ผย X๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ฉด โ€˜(X)โ€™์ด๋‚˜ โ€˜[X]โ€™๋„ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ๋œ๋‹ค.
  3. X์™€ย Yย ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ผ๋ฉด ์ด๋“ค์„ ๊ฒฐํ•ฉํ•œย XY๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด โ€˜(()[[]])โ€™๋‚˜ โ€˜(())[][]โ€™ ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด์ง€๋งŒ โ€˜([)]โ€™ ๋‚˜ โ€˜(()()[]โ€™ ์€ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์•„๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ดย X์— ๋Œ€ํ•˜์—ฌ ๊ทธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’(๊ด„ํ˜ธ๊ฐ’)์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ๊ฐ’(X)๋กœ ํ‘œ์‹œํ•œ๋‹ค.

  1. โ€˜()โ€™ ์ธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 2์ด๋‹ค.
  2. โ€˜[]โ€™ ์ธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 3์ด๋‹ค.
  3. โ€˜(X)โ€™ ์˜ ๊ด„ํ˜ธ๊ฐ’์€ 2ร—๊ฐ’(X) ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  4. โ€˜[X]โ€™ ์˜ ๊ด„ํ˜ธ๊ฐ’์€ 3ร—๊ฐ’(X) ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  5. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ดย X์™€ย Y๊ฐ€ ๊ฒฐํ•ฉ๋œย XY์˜ ๊ด„ํ˜ธ๊ฐ’์€ ๊ฐ’(XY)= ๊ฐ’(X)+๊ฐ’(Y) ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด โ€˜(()[[]])([])โ€™ ์˜ ๊ด„ํ˜ธ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

โ€˜()[[]]โ€™ ์˜ ๊ด„ํ˜ธ๊ฐ’์ด 2 + 3ร—3=11 ์ด๋ฏ€๋กœ โ€˜(()[[]])โ€™์˜ ๊ด„ํ˜ธ๊ฐ’์€ 2ร—11=22 ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  โ€˜([])โ€™์˜ ๊ฐ’์€ 2ร—3=6 ์ด๋ฏ€๋กœ ์ „์ฒด ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 22 + 6 = 28 ์ด๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ ๊ด„ํ˜ธ์—ด์„ ์ฝ๊ณ  ๊ทธ ๊ด„ํ˜ธ๊ฐ’์„ ์•ž์—์„œ ์ •์˜ํ•œ๋Œ€๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“ฅ์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๊ด„ํ˜ธ์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด(์ŠคํŠธ๋ง)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ ๊ทธ ๊ธธ์ด๋Š” 1 ์ด์ƒ, 30 ์ดํ•˜์ด๋‹ค.
(()[[]])([])
[][]((])

๐Ÿ“ค์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๊ทธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์ผ ์ž…๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด์ด๋ฉด ๋ฐ˜๋“œ์‹œ 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
28
0


๋ฌธ์ œ ์ดํ•ด


  • ๊ด„ํ˜ธ์—ด์— ๊ฐ๊ฐ ๋ฐฐ๋‹น๋œ ์ˆซ์ž์— ๋งž๊ฒŒ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ
    • ๋‹จ, ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ โ†’ ๋ฐ˜๋“œ์‹œ 0 ์ถœ๋ ฅ!


์•Œ๊ณ ๋ฆฌ์ฆ˜


์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 35๋ถ„

  • ์ž…๋ ฅ
    • String List ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ
    • ๊ธฐํ˜ธ ( โ†’ opencount ์„ธ๊ธฐ
    • ๊ธฐํ˜ธ ) โ†’ closecount ์„ธ๊ธฐ
      • ๋‘ count๊ฐ€ ์ผ์น˜ํ•ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด
      • ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, 0 ๋ฐ˜ํ™˜
    • ๊ธฐํ˜ธ [ โ†’ opencount ์„ธ๊ธฐ
    • ๊ธฐํ˜ธ ] โ†’ closecount ์„ธ๊ธฐ
      • ๋‘ count๊ฐ€ ์ผ์น˜ํ•ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด
      • ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, 0 ๋ฐ˜ํ™˜
    • ๊ฒฐ๊ณผ ๊ฐ’ : ๊ธฐํ˜ธ (,) ๊ฐœ์ˆ˜ ๊ณฑ + ๊ธฐํ˜ธ [,] ๊ฐœ์ˆ˜ ๊ณฑ
      • ๊ธฐํ˜ธ (, ) : count*2
      • ๊ธฐํ˜ธ [, ] : (count + 1)*count
  • ์ถœ๋ ฅ
    • ๊ฒฐ๊ณผ ๊ฐ’ ์ถœ๋ ฅํ•˜๊ธฐ
package BJ;

import java.util.*;

public class BJ2504 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String List = sc.nextLine();
		
		int openCntS = 0;
		int closeCntS = 0;
		
		int openCntL = 0;
		int closeCntL = 0;
		
		int result = 0;
		
		for(int i=0; i<List.length(); i++) {
			if(List.charAt(i) == '(') openCntS++;
			
			if(List.charAt(i) == ')') closeCntS++;
		
			if(List.charAt(i) == '[') openCntL++;
		
			if(List.charAt(i) == ']') closeCntL++;
		
		}
		
		if(openCntS == closeCntS && openCntL == closeCntL) {
			result = (openCntS*2) + ((openCntL+1)*3);
		} else {
			result = 0;
		}
		System.out.println(result);
	}

}


์˜ค๋‹ต ์ฒดํฌ


  • ์›ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
    • ๊ด„ํ˜ธ์˜ ์ˆ˜๋ฅผ ์„ธ๋Š” ๋Œ€์‹ , ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด ํ•ด๊ฒฐ
//before
if(List.charAt(i) == '(') openCntS++;
			
if(List.charAt(i) == ')') closeCntS++;

if(List.charAt(i) == '[') openCntL++;

if(List.charAt(i) == ']') closeCntL++;

}
//after
/*์—ฌ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ
	- ํ•ด๋‹น ๊ด„ํ˜ธ๋ฅผ ์Šคํƒ์— push
	- temp *2 ๋˜๋Š” *3ํ•˜๊ธฐ
	*/
	if(List.charAt(i) == '(') {
		stack.push(List.charAt(i));
		temp *= 2;
	}
	if(List.charAt(i) == '[') {
		stack.push(List.charAt(i));
		temp *= 3;
	}
	
	
	/*๋‹ซ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ
	 - ์Šคํƒ์ด ๋น„์–ด์žˆ๊ณ   + ์Šคํƒ ๋งจ ์œ„์— ์žˆ๋Š” ๊ด„ํ˜ธ์™€ ํ˜„์žฌ ๊ด„ํ˜ธ๊ฐ€ ๋งค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(peek๋กœ ํ™•์ธ)
	 -> ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฌธ์ž์—ด๋กœ ๋ณด๊ณ  ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ
	 */
	if(List.charAt(i) == ')' && (stack.isEmpty() || stack.peek() != '(')) {
		isValid = false;
		break;
	}
	if(List.charAt(i) == ']' && (stack.isEmpty() || stack.peek() != '[')) {
		isValid = false;
		break;
	}
	
	
	
	/*์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์„ฑ๋ฆฝ๋˜๋Š” ๊ฒฝ์šฐ
	 - ์ด์ „์— ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ด„ํ˜ธ์˜€๋Š”์ง€ ํ™•์ธ -> ํ•ด๋‹น ๊ด„ํ˜ธ์— ํ• ๋‹น๋œ ๊ฐ’์„ ๊ฒฐ๊ณผ์— ๋”ํ•˜๊ธฐ
	 - ์Šคํƒ์—์„œ ๊ด„ํ˜ธ๋ฅผ pop
	 - ์ž„์‹œ ๊ฐ’ temp๋ฅผ ํ•ด๋‹น ๊ด„ํ˜ธ์˜ ๊ทœ์น™์— ๋งž๊ฒŒ /=2 ๋˜๋Š” /=3
	*/
	if(List.charAt(i) == ')') {
		if(List.charAt(i-1) == '(')
			result += temp;
		stack.pop();
		temp /= 2;
	}
	if(List.charAt(i) == ']') {
		if(List.charAt(i-1) == '[')
			result += temp;
		stack.pop();
		temp /= 3;
	}
}
  • ๊ฒฐ๊ณผ ๊ฐ’ ๊ณ„์‚ฐ
//before
if(openCntS == closeCntS && openCntL == closeCntL) {
	result = (openCntS*2) + ((openCntL+1)*3);
} else {
result = 0;
}
//after
if(!isValid || !stack.isEmpty()) { //!(์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด) ์ฆ‰, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์—ด์ด๊ฑฐ๋‚˜ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” 0 ์ถœ๋ ฅ
	result = 0;
}


์ตœ์ข… ํ’€์ด


  • ๊ฐœ๋… ์ฐธ๊ณ 

[BOJ] ๋ฐฑ์ค€ 2504๋ฒˆ ๊ด„ํ˜ธ์˜ ๊ฐ’ (Java)

์‹ค์ œ ํ’€์ด ์‹œ๊ฐ„ : 1์‹œ๊ฐ„ 38๋ถ„(์ฒซ ํ’€์ด ํฌํ•จ)

  • ์ž…๋ ฅ
    • ๊ด„ํ˜ธ์—ด List ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ณ„์‚ฐ
    • Stack ์„ ์–ธ
    • ์ž„์‹œ ๊ฐ’ temp, ์ตœ์ข… ๊ฐ’ result ์ง€์ •
    • ์—ฌ๋Š” ๊ด„ํ˜ธ
      • ํ•ด๋‹น ๊ด„ํ˜ธ๋ฅผ ์Šคํƒ์— push
      • temp 2 ๋˜๋Š” 3ํ•˜๊ธฐ
    • ๋‹ซ๋Š” ๊ด„ํ˜ธ
      • ์Šคํƒ์ด ๋น„์–ด์žˆ๊ณ  + ์Šคํƒ ๋งจ ์œ„์— ์žˆ๋Š” ๊ด„ํ˜ธ์™€ ํ˜„์žฌ ๊ด„ํ˜ธ๊ฐ€ ๋งค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(peek๋กœ ํ™•์ธ) -> ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฌธ์ž์—ด๋กœ ๋ณด๊ณ  ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ
    • ๊ด„ํ˜ธ์—ด ์„ฑ๋ฆฝ ์—ฌ๋ถ€ ์กฐ์‚ฌ
      • ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์„ฑ๋ฆฝ๋˜๋Š” ๊ฒฝ์šฐ
        • ์ด์ „์— ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ด„ํ˜ธ์˜€๋Š”์ง€ ํ™•์ธ -> ํ•ด๋‹น ๊ด„ํ˜ธ์— ํ• ๋‹น๋œ ๊ฐ’์„ ๊ฒฐ๊ณผ์— ๋”ํ•˜๊ธฐ
        • ์Šคํƒ์—์„œ ๊ด„ํ˜ธ๋ฅผ pop
        • ์ž„์‹œ ๊ฐ’ temp๋ฅผ ํ•ด๋‹น ๊ด„ํ˜ธ์˜ ๊ทœ์น™์— ๋งž๊ฒŒ /=2 ๋˜๋Š” /=3
  • ์ถœ๋ ฅ
    • ๊ฒฐ๊ณผ ๊ฐ’ ์ถœ๋ ฅํ•˜๊ธฐ
      • (์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด) ์ฆ‰, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์—ด์ด๊ฑฐ๋‚˜ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” 0 ์ถœ๋ ฅ
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String List = sc.nextLine();
		
		Stack<Character> stack = new Stack<>();
		int result = 0;
		int temp = 1; //์ž„์‹œ ๊ฐ’์€ ๊ด„ํ˜ธ๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ 2๋กœ, ์—ฌ๋Š” ๋Œ€๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ 3์œผ๋กœ ์ดˆ๊ธฐํ™”
		boolean isValid = true; //์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ์Œ์ด ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ
		
		for(int i=0; i<List.length(); i++) {
			
			/*์—ฌ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ
			- ํ•ด๋‹น ๊ด„ํ˜ธ๋ฅผ ์Šคํƒ์— push
			- temp *2 ๋˜๋Š” *3ํ•˜๊ธฐ
			*/
			if(List.charAt(i) == '(') {
				stack.push(List.charAt(i));
				temp *= 2;
			}
			if(List.charAt(i) == '[') {
				stack.push(List.charAt(i));
				temp *= 3;
			}
			
			
			/*๋‹ซ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ
			 - ์Šคํƒ์ด ๋น„์–ด์žˆ๊ณ   + ์Šคํƒ ๋งจ ์œ„์— ์žˆ๋Š” ๊ด„ํ˜ธ์™€ ํ˜„์žฌ ๊ด„ํ˜ธ๊ฐ€ ๋งค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(peek๋กœ ํ™•์ธ)
			 -> ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฌธ์ž์—ด๋กœ ๋ณด๊ณ  ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ
			 */
			if(List.charAt(i) == ')' && (stack.isEmpty() || stack.peek() != '(')) {
				isValid = false;
				break;
			}
			if(List.charAt(i) == ']' && (stack.isEmpty() || stack.peek() != '[')) {
				isValid = false;
				break;
			}
			
			
			
			/*์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์„ฑ๋ฆฝ๋˜๋Š” ๊ฒฝ์šฐ
			 - ์ด์ „์— ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ด„ํ˜ธ์˜€๋Š”์ง€ ํ™•์ธ -> ํ•ด๋‹น ๊ด„ํ˜ธ์— ํ• ๋‹น๋œ ๊ฐ’์„ ๊ฒฐ๊ณผ์— ๋”ํ•˜๊ธฐ
			 - ์Šคํƒ์—์„œ ๊ด„ํ˜ธ๋ฅผ pop
			 - ์ž„์‹œ ๊ฐ’ temp๋ฅผ ํ•ด๋‹น ๊ด„ํ˜ธ์˜ ๊ทœ์น™์— ๋งž๊ฒŒ /=2 ๋˜๋Š” /=3
			*/
			if(List.charAt(i) == ')') {
				if(List.charAt(i-1) == '(')
					result += temp;
				stack.pop();
				temp /= 2;
			}
			if(List.charAt(i) == ']') {
				if(List.charAt(i-1) == '[')
					result += temp;
				stack.pop();
				temp /= 3;
			}
		}
		
		
		
		
		if(!isValid || !stack.isEmpty()) { //!(์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด) ์ฆ‰, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์—ด์ด๊ฑฐ๋‚˜ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” 0 ์ถœ๋ ฅ
			result = 0;
		}
		System.out.println(result);
	}
}

profile
์–ธ์  ๊ฐ€ ๋‚ด ์ฝ”๋“œ๋กœ ์„ธ์ƒ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก, BE ๊ฐœ๋ฐœ ๊ธฐ๋ก ๋…ธํŠธโ˜˜๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€