-
Lv2 쇠막대기Algorithm/Programmers 2019. 12. 24. 15:46728x90
출처: https://programmers.co.kr/learn/courses/30/lessons/42585
분류: Lv2 스택/큐
닫히는 ")"를 만났을 때
이게 레이저인지 막대기의 끝점인지를 2가지 경우를 분류해서 생각하면 되는 문제입니다.
")"를 만났을 때 이전도 ")"라면 끝점, "(" 라면 레이저 입니다.
레이저라면 아직 닫히지 않은 쇠막대기들의 개수만큼 더해지고
끝 점이라면 하나의 막대기만 끝났으므로 +1 해주면 됩니다.
정리하면, 열리는 "("를 만나면 스택에 "("를 넣어주고
닫히는 ")"를 만나면 스택에서 "(" 하나를 빼준 뒤, 이게 레이저인지 끝점인지를 구분해서 처리합니다.이 문제 같은 경우, "(" 아니면 ")" 밖에 없기 때문에, 굳이 스택없이 그냥 개수만 컨트롤 해서 풀었습니다.
이전의 문자를 저장할 변수를 하나 만들어 사용하였습니다.import Foundation func solution(_ arrangement:String) -> Int { var unit = 0 var result = 0 var before = "" for s in arrangement { if s == ")" { unit -= 1 // 레이저 if before == "(" { result += unit } else if before == ")" { result += 1 } before = ")" } else { unit += 1 before = "(" } } return result }
회고
문제를 보고 경우의 수를 잘 판단하는 연습을 하자.
'Algorithm > Programmers' 카테고리의 다른 글
Programmers) Lv2 스킬트리 (0) 2020.03.15 Programmers) Lv3 섬 연결하기 (0) 2020.03.06 Programmers) Lv2 조이스틱 (0) 2020.01.29 Lv2 위장 (0) 2019.12.30 다리를 지나는 트럭 Lv2 (0) 2019.12.23