-
6. 쇠막대기코딩 테스트/Level 2 2020. 7. 20. 22:12반응형
https://programmers.co.kr/learn/courses/30/lessons/42585
파이썬
def solution(arrangement): sum, stack = 0, 0 for element in arrangement: if element == '(': # '('인 경우 stack += 1 # 막대가 하나 쌓인다. last = '(' # '('을 지나갔음을 기록해 둔다. else: # ')' 인 경우 if last == '(': # 직전 블럭이 '(' 이었으면 stack -= 1 # 막대가 아니라 레이저니까 쌓은 것에서 하나 빼주고 sum += stack # 쌓은 만큼 잘라주니까 합계에 추가하자. else: # 직전 블럭이 ')' 이니까 stack -= 1 # 쌓은 막대에서 하나가 줄어들고 sum += 1 # 합계에는 하나 추가된다. last = ')' # ')' 을 지나갔음을 기록해 둔다. return sum
() 를 다른 문자로 치환해서 레이저와 막대를 분류 후 정리하는 것이 더 직관적입니다.
def solution(arrangement): arrangement = arrangement.replace('()', 'L') sum, stack = 0, 0 for element in arrangement: if element == '(': # '('인 경우 stack += 1 # 막대가 하나 쌓인다. elif element == 'L': # 'L' 인 경우 sum += stack # 쌓은 만큼 잘라주니까 합계에 추가하자. else: # 직전 블럭이 ')' 이니까 stack -= 1 # 쌓은 막대에서 하나가 줄어들고 sum += 1 # 합계에는 하나 추가된다. return sum
자바스크립트
function solution(arrangement) { arrangement = arrangement.split("()").join("L"); var sum = 0; var stack = 0; for (var i = 0; i < arrangement.length; i++) { switch (arrangement[i]) { case '(': stack++; break; case ')': sum++; stack--; break; case 'L': sum += stack; break; } } return sum; }
자바 스크립트의 replace는 1회만 replace 해주기 때문에 이런 편법을 이용합니다. OTL
자바
class Solution { public int solution(String arrangement) { arrangement = arrangement.replace("()","L"); int answer = 0; int stack = 0; for (char c : arrangement.toCharArray()) { if (c == '(') stack++; else if (c == 'L') answer += stack; else { stack--; answer++; } } return answer; } }
코틀린
class Solution { fun solution(arrangement: String): Int { val arrangement = arrangement.replace("()", "L") var answer = 0 var stack = 0 for (c in arrangement) { when (c) { '(' -> stack++ 'L' -> answer += stack ')' -> { stack-- answer++ } } } return answer } }
C#
public class Solution { public int solution(string arrangement) { arrangement = arrangement.Replace("()", "L"); int sum = 0; int stack = 0; foreach (char c in arrangement) { if (c == '(') stack++; else if (c == 'L') sum += stack; else // c == ')' { stack--; sum++; } } return sum; } }
반응형