본문 바로가기
[PS] 문제풀이/LeetCode

763. Partition Labels ( LeetCode / JAVA / 안산학생 )

by 안산학생 2021. 9. 12.

763. Partition Labels

 

Partition Labels - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 


 

문제풀이

 - 새로운 배열을 만든다.

 - 입력 크기만큼 순회하며 [해당 알파벳]에 현재 순회 값을 저장한다.

 - 다시, 입력 크기만큼 순회하며 [순회 값 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로 하기로 했다.

댓글