๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/76502?language=java
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์์ฝ
๋ฌธ์์ด s๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ธ์ง ๋ฐํํ๋ ๋ฌธ์
์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค.
- (), [], {}๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
- ๋ง์ฝ A๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, (A), [A], {A} ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
- ๋ง์ฝ A, B๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, AB ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.'
์ ํ
- s์ ๊ธธ์ด๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
ํ์ด
์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ์ ์์ ๋ฐ๋ผ ์๊ดํธ๋ฅผ ๊ธฐ์ค์ผ๋ก 3๊ฐ์ง์ ๊ตฌ์ฒด์ ์ธ ์์๋ฅผ ๋ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- `()`
- `(())`
- `()()`
์ฌ๋ฐ๋ฅธ ๊ดํธ์ธ์ง ํ๋จํ๋ ๊ณผ์ ์ ์คํ์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
- `(`๊ฐ ๋์ค๋ฉด ์คํ์ push ํ๋ค.
- `)`๊ฐ ๋์ค๋ฉด ์คํ์์ pop ํ ๋ฌธ์๊ฐ `(` ์ธ์ง ํ์ธํ๋ค.
- ์คํ์์ pop์ ํ๊ธฐ ์ ์ ์ผ๋จ ์คํ์ด ๋น์ด์์ง ์์์ง๋ ํ์ธํ๋ค.
- s์ ๋ฌธ์๋ฅผ ๋ชจ๋ ์ํํ ํ, ์คํ์ด ๋น์ด์๋์ง ํ์ธํ๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ผ๋ฉด ์คํ์ด ๋ชจ๋ ๋น์ด์์ด์ผ ํ๋ค.
์ ๊ณผ์ ์ ์ค๊ดํธ, ๋๊ดํธ์๋ ๋๊ฐ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ s๋ฅผ ์ผ์ชฝ์ผ๋ก ํ์ ์ํค๋ฉด์ ์ด๋ฅผ ๋งค๋ฒ ์ํํ๋ฉด ๋ฉ๋๋ค.
์ต์ข ์ฝ๋ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- x๋ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
- s๋ฅผ x๋งํผ ์ผ์ชฝ์ผ๋ก ํ์ ์ํจ๋ค.
- s๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ธ์ง ํ๋จํ๋ค.
- (x <s์ ๊ธธ์ด-1)์ด๋ผ๋ฉด x๋ฅผ 1 ์ฆ๊ฐ์ํจ ํ, 2~3 ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ฌ๊ธฐ์ ๊ณ ๋ฏผํด์ผ ํ ๋ถ๋ถ์ “s๋ฅผ x๋งํผ ์ผ์ชฝ์ผ๋ก ์ด๋ป๊ฒ ํ์ ํ ๊ฒ์ธ๊ฐ?”์ ๋๋ค.
์ผ์ชฝ์ผ๋ก ํ์ ์ํค๋ฉด, ๋ฌธ์์ด ๊ธธ์ด๋ ๋์ผํ์ง๋ง ์์์ ์ธ๋ฑ์ค๊ฐ ํ๋์ฉ ์ฆ๊ฐ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ธ๋ฑ์ค๋ x ๊ฐ๊ณผ ๋์ผํ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๊ณต์์ ์ธ์ธ ์ ์์ต๋๋ค.
- ์์์ ์ธ๋ฑ์ค: `x`
- ๋ฌธ์์ด ์ ๋ฌธ์๋ฅผ ์ํํ๋ ๋ณ์ : `i` (`0`≤`i` <`s์ ๊ธธ์ด`)
- x๋งํผ ์ผ์ชฝ์ผ๋ก ํ์ ์ํจ s์ ํน์ ๋ฌธ์ ์ธ๋ฑ์ค: `(x+i)%(s์ ๊ธธ์ด)`
์ฝ๋
import java.util.*;
class Solution {
public int solution(String s) {
int cnt = 0;
for(int x=0; x<s.length(); x++){
if(isValid(s,x)) cnt++;
}
return cnt;
}
boolean isValid(String s, int x){
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
char c = s.charAt((x+i)%s.length());
if(c=='(' || c=='[' || c=='{'){
stack.push(c);
} else{
if(stack.isEmpty()) return false;
if(c==')' && stack.pop()!='(') return false;
if(c==']' && stack.pop()!='[') return false;
if(c=='}' && stack.pop()!='{') return false;
}
}
return stack.isEmpty();
}
}
๐ท ์๊ฐ ๋ณต์ก๋
- N: s์ ๊ธธ์ด
- `isValid()`: O(N)
- solution์ for๋ฌธ: ์ต๋ N๋ฒ ๋ฐ๋ณต
- ์ต์ข ์๊ฐ ๋ณต์ก๋ = O(N*N)
'๐ช Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค] ์ฃผ์ ๊ฐ๊ฒฉ (JAVA) (2) | 2025.02.05 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ (JAVA) (1) | 2025.02.04 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฉ๋ฌธ ๊ธธ์ด (JAVA) (2) | 2025.02.03 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ์คํจ์จ (JAVA) (1) | 2025.02.02 |