728x90
반응형
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어
- ()() 또는 (())() 는 올바른 괄호입니다.
- )()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
using System;
using System.Collections.Generic;
class Program
{
public static bool solution(string s)
{
int count = 0;
char[] ch = s.ToCharArray();
foreach(char c in ch)
{
count = c == '(' ? ++count : --count;
if (count < 0) return false;
}
return count == 0 ? true : false;
}
public static void Main()
{
Console.WirteLine(solution("()()"));
Console.WirteLine(solution(")()("));
Console.WirteLine(solution("(()())"));
}
}
처음 봤을 땐 어떤식으로 풀어야 할까 했는데 조금 더 고민해보며 생각해낸게
1. '(' 와 ')' 의 개수는 같다면 true. (다르다면 짝이 안맞으니 false)
2. 시작을 ')'로 한다면 false.
위의 두 조건만 만족한다면 어떠한 경우에서도 맞게 작동한다고 생각했다.
8번 : '(' 와 ')'의 개수를 알기 위한 count를 선언했다.
9번 : 문자열을 하나의 문자씩 받기 위해 char형 배열로 받았다.
11번 : char형 배열에 들어있는 요소의 수만큼 반복한다.
13번 : char형 배열에 들어있는 첫 번째 요소부터 '('인지 확인한다. 맞다면 count+1, 틀리다면 count-1을 한다.
13번이 가능한건 제한사항에 문자열을 '(' 와 ')'로만 이루어져 있다고 했기 때문이다.
14번 : 위의 조건2처럼 시작이 '('라면 -1이 count에 있을테고 이럴경우 바로 false를 반환하면 된다.
16번 : 반복을 거쳐 나온 결과가 0이라면 true (개수가 같은 경우) 아니라면 false(개수가 다른 경우)를 반환한다.
사실 삼항연산자를 중첩으로 써보질 않아서 처음에 아래와 같이 했었는데 안되었다...
코드만 보면서 이게 될까? 했는데 역시 안된다...
using System;
using System.Collections.Generic;
class Program
{
public static bool solution(string s)
{
int count = 0;
char[] ch = s.ToCharArray();
foreach(char c in ch)
{
return count < 0 ? false : c == '(' ? ++count : --count;
}
return count == 0 ? true : false;
}
public static void Main()
{
Console.WirteLine(solution("()()"));
Console.WirteLine(solution(")()("));
Console.WirteLine(solution("(()())"));
}
}
위 코드는 에러가 나는 안되는 코드지만... 기억을 위해 남겨놓는다.
bool과 int는 삼항연산자로 같이 쓸 수 없다...
728x90
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[C#] 단어 퍼즐 (0) | 2020.05.08 |
---|---|
[파이썬] 프로그래머스 카펫 (0) | 2020.04.30 |
[C#] 프로그래머스 카펫 (0) | 2020.04.30 |