문제풀이
- 새로운 배열을 만든다.
- 입력 크기만큼 순회하며 [해당 알파벳]에 현재 순회 값을 저장한다.
- 다시, 입력 크기만큼 순회하며 [순회 값 or 추 후 비교되어 큰 값]과 [해당 알파벳의 가장 뒷자리] 값을 비교하여 가장 큰 값을 저장한다. [순회 값]과 [알파벳의 가장 뒷자리] 수가 같아진다면 ans 배열에 등록한다.
코드
class Solution {
public List<Integer> partitionLabels(String s) {
// return 할 arrayList
List<Integer> ans = new ArrayList();
// 배열 값에 마지막 값 넣기
// aba 라면 a는 가장 뒤에 있는 순서로 저장 됌
int[] arr = new int[26];
for(int i=0; i<s.length(); i++) arr[s.charAt(i)-'a'] = i;
// 현재 순서, 리스트에 저장하고 난 이후 부터 count 순서
int idx = 0;
int beforeIdx = 0;
for(int i=0; i<s.length(); i++){
// 현재 순서와 해당 알파벳의 가장 뒤에 있는 수를 비교
idx = Math.max(idx, arr[s.charAt(i)-'a']);
// 현재 순서가 해당 알파벳의 가장 뒤에 있는 수라면 리스트에 추가
if(i==idx){
ans.add(i-beforeIdx+1);
beforeIdx = i +1;
}
}
return ans;
}
}
회고
- LeetCode 첫 문제인데 많이 당황했다. 문제가 이해가 안 돼서 몇 시간 동안 고민하다가 답안을 많이 참고했다. 위 소스도 답안 소스가 거의 동일하다. 점차 답안을 보지 않으며 푸는 습관을 가져야겠다. 또한 LeetCode PS는 JAVA로 하려고 한다. JAVA로 PS 한 경험이 전무하지만, 업무 능력을 향상하기 위해 JAVA로 하기로 했다.
'[PS] 문제풀이 > LeetCode' 카테고리의 다른 글
617. Merge Two Binary Trees ( LeetCode / JAVA / 안산학생 ) (0) | 2021.09.12 |
---|
댓글