๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - (Level2)์‡ ๋ง‰๋Œ€๊ธฐ(์Šคํƒ/ํ)

by ์ฃผ๋ฐœ2 2020. 3. 25.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42585

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(String arr) {
        int answer = 0;
        Stack<Character> s = new Stack<Character>();
        
        for(int i=0; i<arr.length(); i++){
            // ํ˜„์žฌ ๊ฐ’์ด '(' ์ธ ๊ฒฝ์šฐ -> ์Šคํƒ์— ์Œ“๊ธฐ
            if(arr.charAt(i) == '(')
                s.push('(');
            
            // ํ˜„์žฌ ๊ฐ’์ด ')' ์ธ ๊ฒฝ์šฐ -> ์ด์ „๊ฐ’์ด '('์ธ์ง€ ')'์ธ์ง€ ํŒ๋‹จ.
            else{      
                s.pop();     // ์Šคํƒ์—์„œ '(' ํ•˜๋‚˜ ์ œ๊ฑฐ
                if(i>0 && arr.charAt(i-1) == '(')   
                    answer += s.size(); // '()' ์ธ ๊ฒฝ์šฐ -> ๋ ˆ์ด์ €
                else    
                    answer ++;   // '))' ์ธ ๊ฒฝ์šฐ -> ์‡ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ํ•˜๋‚˜ ๋๋‚˜๋Š”๊ฒฝ์šฐ
            }
        }
        return answer;
    }
}

ํ’€์ด

Stack์„ ์ด์šฉํ•ด ํ•ด๊ฒฐํ–ˆ๋‹ค.

ํ˜„์žฌ ๊ฐ’์ด '(' ์ด๋ƒ, ')' ์ด๋ƒ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•˜๋Š”๋ฐ,,

์•„๋ž˜ ์‚ฌ์ง„์—์„œ ๋ณด๋“ฏ ๋ ˆ์ด์ €๋Š” ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ค๋Š” '()'์Œ ์ด๋‹ค.

๋ ˆ์ด์ €์— ์˜ํ•ด ์ž˜๋ฆฌ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐฏ์ˆ˜๋Š” ๋ ˆ์ด์ €'()' ๊ฐ€ ์˜ค๊ธฐ ์ „ '(' ์˜ ๊ฐฏ์ˆ˜(์‡ ๋ง‰๋Œ€๊ธฐ ๊ฐฏ์ˆ˜)์™€ ๊ฐ™๋‹ค.

(์•ž์—์„œ ์ž˜๋ฆฐ๊ฒƒ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ๋’ท๋ถ€๋ถ„์€ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.)

์‡ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ๋‹ซํžˆ๋Š” ๊ตฌ๊ฐ„ - ')' ๊ฐ€ ์˜ค๋Š” ๊ณณ์€, ์•„๋ž˜์—์„œ ํ‘œ์‹œํ•œ ๋ถ€๋ถ„์ธ๋ฐ ๋‹ซํžˆ๋Š”๊ตฌ๊ฐ„์—์„œ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ํ•œ๊ฐœ์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

โ— ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ '(' ์ธ ๊ฒฝ์šฐ

  - ์Šคํƒ์— ๊ทธ๋Œ€๋กœ ์Œ“๋Š”๋‹ค.

 

โ— ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ')' ์ธ ๊ฒฝ์šฐ

  - ์Šคํƒ์—์„œ '(' ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

 

  - ์ด์ „ ๋ฌธ์ž๊ฐ€ '(' ์ธ ๊ฒฝ์šฐ -> ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ค๋Š” '()'์Œ ์ด๋ฏ€๋กœ, ๋ ˆ์ด์ €์ด๋‹ค.

  - ๋”ฐ๋ผ์„œ ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐฏ์ˆ˜(์ด์ „ '('์˜๊ฐฏ์ˆ˜ = ์Šคํƒ์˜ ์‚ฌ์ด์ฆˆ) ๋งŒํผ ๋”ํ•ด์ค€๋‹ค.

 

  - ์ด์ „ ๋ฌธ์ž๊ฐ€ ')' ์ธ ๊ฒฝ์šฐ -> ๋ ˆ์ด์ €๊ฐ€ ์•„๋‹Œ ์‡ ๋ง‰๋Œ€๊ธฐ๊ฐ€ ๋๋‚˜์„œ ๋‹ซํžˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

  - ๋”ฐ๋ผ์„œ ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ +1 ํ•ด์ค€๋‹ค.

 

 

 

 

* ๋ฌธ์ œ์—์„œ ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ค๋Š” ์Œ'()' ์„ replace("()", "0"); ๊ณผ ๊ฐ™์ด ์น˜ํ™˜ํ•ด์„œ ๋ ˆ์ด์ €๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ฉด ๋” ๊ฐ„๋‹จํ•˜๋‹ค.,

import java.util.*;
 
class Solution {
    public int solution(String arrangement) {
        int answer = 0;
        
        arrangement = arrangement.replace("()", "1");
        
        Stack<Character> a = new Stack<Character>();
        for(int i=0; i<arrangement.length(); i++) {
            char cursor = arrangement.charAt(i);
            if(cursor == '(') {
                a.push(cursor);
            } 
            else if(cursor == '1') {
                answer += a.size();
            }
            else if(cursor == ')') {
                answer += 1;
                a.pop();
            }
        }
        
        return answer;
    }
}

https://ju-nam2.tistory.com/46

 

[Java][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][Level 2] ์‡ ๋ง‰๋Œ€๊ธฐ

๋ฌธ์ œ ์„ค๋ช… (๋งํฌ) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋ ˆ์ด์ €๋กœ ์ ˆ๋‹จํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด์„œ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ฒน์ณ ๋†“๊ณ , ๋ ˆ์ด์ €๋ฅผ ์œ„์—์„œ ์ˆ˜์ง์œผ๋กœ ๋ฐœ์‚ฌํ•˜์—ฌ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์„ ์ž๋ฆ…๋‹ˆ๋‹ค. ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด..

ju-nam2.tistory.com

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€