📌프로그래머스 76502
💡풀이
- string s를 char List로 만든다.
- s의 길이만큼 반복검사
- IsCorrect 메서드에서 올바른 괄호 짝인지 확인 후 맞으면 answer++
- char List의 0번을 Add해 맨끝에 위치, 0번을 지워 왼쪽으로 한 칸 회전시킨다.
public int 괄호회전하기(string s)
{
int answer = 0;
List<char> chars = new List<char>(s);
for(int i = 0; i < s.Length; i++)
{
answer += IsCorrect(chars) ? 1 : 0;
chars.Add(chars[0]);
chars.RemoveAt(0);
}
return answer;
}
- Stack<char> stack을 만든다.
- 여는 괄호와 닫는 괄호를 담은 string open, close를 만든다
- List<char> 길이만큼 반복한다.
- chars[i] 가 여는 괄호이면 스택에 푸시
- chars[i] 가 닫는 괄호이면 추가 검사
- stack이 비어있으면 false
- stack을 Peek했을 때 나온 괄호(open)과 close의 괄호가 짝이 맞는지 검사해 짝이 안 맞으면 false
- 짝이 맞으면 stack을 Pop 한다.
- 반복문이 종료되고 stack에 남은 괄호가 있으면 false
- stack이 비어있으면 모든 짝이 맞았기 때문에 true
private bool IsCorrect(List<char> chars)
{
Stack<char> stack = new Stack<char>();
string open = "({[";
string close = ")}]";
for(int i = 0; i < chars.Count; i++)
{
if (open.Contains(chars[i]))
stack.Push(chars[i]);
else
{
if (stack.Count == 0)
return false;
if (chars[i] != close[open.IndexOf(stack.Peek())])
return false;
stack.Pop();
}
}
if(stack.Count != 0)
return false;
return true;
}
'프로그래머스' 카테고리의 다른 글
카운트다운 (C#) (0) | 2024.05.20 |
---|---|
n개 간격의 원소들 (C#) (0) | 2024.05.20 |
귤 고르기 (C#) (0) | 2024.05.09 |
멀리 뛰기 (C#) (0) | 2024.05.09 |
예상 대진표 (C#) (0) | 2024.05.09 |