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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ

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

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๋Š”, ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ฌธ์ž์—ด์—์„œ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด 2๊ฐœ ๋ถ™์–ด ์žˆ๋Š” ์ง์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ๋‹ค์Œ, ๊ทธ ๋‘˜์„ ์ œ๊ฑฐํ•œ ๋’ค, ์•ž๋’ค๋กœ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค๋ฉด ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด 1์„, ์•„๋‹ ๊ฒฝ์šฐ 0์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค

programmers.co.kr

 

ํ‹€๋ฆฐ ์ฝ”๋“œ

class Solution
{
    	static int solution(String s){
		StringBuilder sb = new StringBuilder(s);
		while(true) {
			boolean flag = true;
			for(int i=0; i<sb.length()-1; i++) {
				// ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด 2๊ฐœ ๋ถ™์–ด์žˆ๋Š” ์ง
				if(sb.charAt(i) == sb.charAt(i+1)) {
					sb.delete(i, i+2);	// i, i+1 ๋ฌธ์ž ์ œ๊ฑฐ
					flag = false;
					break;
				}
			}

			// ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ๊ฑฐ๋‚˜, ์ œ๊ฑฐํ•  ๋ฌธ์ž์—ด์ด ์—†์„๊ฒฝ์šฐ ํƒˆ์ถœ
			if(sb.length() == 0 || flag)
				break;
		}

		if(sb.length() == 0)
			return 1;
		else
			return 0;
	}
}

ํ’€์ด

๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•˜๊ธฐ ์‰ฌ์šด StringBuilder๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ,

๋ชจ๋“  ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด 2๊ฐœ ๋ถ™์–ด์žˆ๋Š” ์ง์ผ๊ฒฝ์šฐ, ์ œ๊ฑฐํ•œ๋‹ค.

๋งŒ์•ฝ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ œ๊ฑฐํ•  ๋ฌธ์ž๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ while๋ฌธ์„ ํƒˆ์ถœํ•œ๋‹ค.

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด 1, ๊ธธ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด 0์„ ๋ฆฌํ„ดํ–ˆ์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

์ •๋‹ต ์ฝ”๋“œ

import java.util.Stack;

class Solution
{
    public int solution(String s)
    {
        Stack<Character> stack = new Stack<Character>();
        for(int i=0; i<s.length(); i++){
            if(!stack.isEmpty() && stack.peek() == s.charAt(i))
                stack.pop();
            else
                stack.push(s.charAt(i));
        }
        return stack.isEmpty() ? 1 : 0;
    }
}

ํ’€์ด

 

Stack์„ ์„ ์–ธํ•˜๊ณ , ์Šคํƒ์— ๋น„์–ด์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ์Šคํƒ์—์„œ ๊ฐ€์žฅ top ๊ฐ’์ด ํ˜„์žฌ ๋น„๊ตํ•  ๊ฐ’๊ณผ ๊ฐ™์„๊ฒฝ์šฐ

pop()์„ ํ†ตํ•ด ํ˜„์žฌ peek๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„๊ฒฝ์šฐ push()๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

 

์œ„ ์˜ˆ์ œ "baabaa" ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค.

๋จผ์ € ์ฒซ๋ฒˆ์งธ๊ฐ’ 'b' ๋Š” ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฏ€๋กœ pushํ•œ๋‹ค.

๊ทธ ํ›„ a๊ฐ’์€ ํ˜„์žฌ ์Šคํƒ์˜ peek๊ฐ’(b) ์™€ ๋‹ค๋ฅด๋ฏ€๋กœ ์—ญ์‹œ pushํ•œ๋‹ค.

๊ทธ ํ›„ a๊ฐ’์€ ํ˜„์žฌ ์Šคํƒ์˜ peek๊ฐ’(a) ์™€ ๊ฐ™์œผ๋ฏ€๋กœ pop์„ ํ†ตํ•ด a๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค -> ์Šคํƒ์˜ ํ˜„์žฌ๊ฐ’์€ b

๊ทธ ํ›„ b๊ฐ’์€ ํ˜„์žฌ ์Šคํƒ์˜ peek๊ฐ’(b)์™€ ๊ฐ™์œผ๋ฏ€๋กœ pop์„ ํ†ตํ•ด b๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค -> ์Šคํƒ์€ ํ˜„์žฌ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ.

๊ทธ ํ›„ a๋ฅผ ๋„ฃ๊ณ , peek๊ฐ’์ด a์ด๋ฏ€๋กœ pop์„ ํ†ตํ•ด a๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์Šคํƒ์€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

์œ„ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์Šคํƒ์ด ๋ฐ”๋กœ ๋– ์˜ฌ๋ž๋‹ค๋ฉด ์†์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ๋ฐ”๋กœ ํ•ด๊ฒฐ์€ ๋ชปํ–ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€๋•Œ ์ ‘๊ทผ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ๋ฌด์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ์ง€ ์ƒ๊ฐํ•˜๊ณ  ํ’€์–ด์•ผ๊ฒ ๋‹ค .

์œ„ ๋ฌธ์ œ์™€ ๋™์ผํ•œ ๋ฌธ์ œ

 

๋ฐฑ์ค€ 3986๋ฒˆ ์ข‹์€ ๋‹จ์–ด

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€