🙋🏼 문제
올바른 괄호
💡 풀이
우선적으로 따져야 할 것 리스트를 정리했다.
- "("이 먼저 시작하는가? ")"이 마지막에 위치하는가?
- "("의 개수 == ")"의 개수
- "("가 있을 때 카운트가 하나씩 증가하고, ")"가 있을 때 카운트를 하나씩 지우면 되지 않을까?
뭔가 고등 수학 중에 확률과 통계에서 비슷한 문제를 봤던 것 같아서 거기서 해결책을 떠올림
|
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번에서 언급한 "("이 먼저 시작하는가?를 판단해주는 요소가 없었기 때문에 통과하지 못했다.
|
var isStartOpen : Bool = true |
|
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일 때만 앞서 말한 삼항연산자의 연산을 할 수 있도록 해결했다.
🙋🏼 문제
올바른 괄호
💡 풀이
우선적으로 따져야 할 것 리스트를 정리했다.
뭔가 고등 수학 중에 확률과 통계에서 비슷한 문제를 봤던 것 같아서 거기서 해결책을 떠올림coding_test_practice/coding_test_practice/240627_12909.swift
Line 14 in 842a67e
String 값을 배열에 하나씩 넣기 위해서 map을 사용했다.
coding_test_practice/coding_test_practice/240627_12909.swift
Line 13 in 842a67e
coding_test_practice/coding_test_practice/240627_12909.swift
Lines 17 to 27 in 842a67e
openCount를 이용해서 "("가 하나 등장할 때마다 카운트를 하나씩 올려줬고, ")"가 등장할 때마다 카운트를 하나씩 줄여줬다.
coding_test_practice/coding_test_practice/240627_12909.swift
Line 30 in 842a67e
삼항연산자를 사용해서 openCount가 0이 되는 경우, 즉 "(" 개수와 ")"의 개수가 같아졌을 때 true로 반환할 수 있도록 했다.
그러나 이렇게 여기까지만 하면 1번에서 언급한 "("이 먼저 시작하는가?를 판단해주는 요소가 없었기 때문에 통과하지 못했다.
coding_test_practice/coding_test_practice/240627_12909.swift
Line 15 in 842a67e
coding_test_practice/coding_test_practice/240627_12909.swift
Lines 17 to 27 in 842a67e
때문에 isStartOpen이라는 Bool 값을 이용해서 "("로 시작하는지를 판단해 주었다. ")"가 등장했을 때 카운트를 하나씩 줄이는데, openCount가 0일 때 ")"가 등장하면 안되기 때문에 false로 전환해주었다.
(사실 이건 처음에 "("로 시작해주는지를 판단해줄 뿐만 아니라 "())(()" 이런 상황처럼 "("가 등장하지 않았는데 ")"가 먼저 등장하는 경우도 방지한다.)
coding_test_practice/coding_test_practice/240627_12909.swift
Lines 29 to 33 in 842a67e
isStartOpen이 true일 때만 앞서 말한 삼항연산자의 연산을 할 수 있도록 해결했다.