프로그래머스 level2의 문제이다.
문제를 이해하는데 시간이 좀 필요했다.
위의 그림을 자세히 보자.
레이저를 만난 쇠막대기는 절단이 된다.
(는 막대기가 시작된 지점이고 )는 막대기가 끝난 지점이다.
막대기가 시작되고 쇠막대기를 만나면 잘리게 된다.
따라서 레이저를 만났을때 아직 (를 만나지 않은 )의 개수가 잘린 막대기의 개수가 된다.
그리고 )를 만났을때는 나머지 1개의 막대기가 생성되게 된다.
이때, 막대기와 레이저의 구분이 애매하기 떄문에 ()로 나타난 레이저를 replace함수를 이용해 @로 바꿔준다.
)를 만나 막대기가 끝났다는 것을 알기 위해서는 stack이 필요하다.
)는 자신 이전에 최신으로 들어온 (를 만나야 ()을 이루기 때문이다.
1.(를 만나면 push한다.
2.레이저인 @를 만나면 레이저 앞에있는 (의 수만큼 막대기가 생긴다.
3.)를 만나면 ()한쌍을 이루어 pop해주고 마지막 잘린 막대기의 숫자(1)을 더해준다.
import java.util.*;
class Solution {
public int solution(String arrangement) {
int answer = 0;
arrangement=arrangement.replace("()","@");
String[] arr= arrangement.split("");
Stack<String> stc=new Stack<>();
for(int i=0;i<arr.length;i++){
if(arr[i].equals("(")){
stc.push("steel");
}
else if(arr[i].equals("@"))
answer+=stc.size();
else{
stc.pop();
answer++;
}
}
return answer;
}
}
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: 다음 큰 숫자 (0) | 2020.03.12 |
---|---|
프로그래머스 코딩테스트 문제: 올바른 괄호 (0) | 2020.03.12 |
프로그래머스 코딩테스트 문제: 문자열 내 마음대로 정렬하기 (0) | 2020.03.10 |
프로그래머스 코딩테스트 문제: 전화번호 목록 (0) | 2020.03.10 |
프로그래머스 코딩테스트 문제: 정수 내림차순으로 배치하기 (0) | 2020.03.07 |