Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

올바른 괄호 #12909 #1

Open
chaentopia opened this issue Jun 27, 2024 · 0 comments
Open

올바른 괄호 #12909 #1

chaentopia opened this issue Jun 27, 2024 · 0 comments
Assignees

Comments

@chaentopia
Copy link
Owner

🙋🏼 문제

올바른 괄호

💡 풀이

우선적으로 따져야 할 것 리스트를 정리했다.

  1. "("이 먼저 시작하는가? ")"이 마지막에 위치하는가?
  2. "("의 개수 == ")"의 개수
  3. "("가 있을 때 카운트가 하나씩 증가하고, ")"가 있을 때 카운트를 하나씩 지우면 되지 않을까?

뭔가 고등 수학 중에 확률과 통계에서 비슷한 문제를 봤던 것 같아서 거기서 해결책을 떠올림

var string = s.map { String($0) }

String 값을 배열에 하나씩 넣기 위해서 map을 사용했다.


string.forEach {
if $0 == "(" {
openCount += 1
} else if $0 == ")" {
if openCount != 0 {
openCount -= 1
} else {
isStartOpen = false
}
}
}

openCount를 이용해서 "("가 하나 등장할 때마다 카운트를 하나씩 올려줬고, ")"가 등장할 때마다 카운트를 하나씩 줄여줬다.

ans = openCount == 0 ? true : false

삼항연산자를 사용해서 openCount가 0이 되는 경우, 즉 "(" 개수와 ")"의 개수가 같아졌을 때 true로 반환할 수 있도록 했다.

그러나 이렇게 여기까지만 하면 1번에서 언급한 "("이 먼저 시작하는가?를 판단해주는 요소가 없었기 때문에 통과하지 못했다.


string.forEach {
if $0 == "(" {
openCount += 1
} else if $0 == ")" {
if openCount != 0 {
openCount -= 1
} else {
isStartOpen = false
}
}
}

때문에 isStartOpen이라는 Bool 값을 이용해서 "("로 시작하는지를 판단해 주었다. ")"가 등장했을 때 카운트를 하나씩 줄이는데, openCount가 0일 때 ")"가 등장하면 안되기 때문에 false로 전환해주었다.
(사실 이건 처음에 "("로 시작해주는지를 판단해줄 뿐만 아니라 "())(()" 이런 상황처럼 "("가 등장하지 않았는데 ")"가 먼저 등장하는 경우도 방지한다.)

if isStartOpen {
ans = openCount == 0 ? true : false
} else {
ans = false
}

isStartOpen이 true일 때만 앞서 말한 삼항연산자의 연산을 할 수 있도록 해결했다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant