본문 바로가기
알고리즘

[LeetCode/JAVA] 942. DI String Match

by 상후 2021. 8. 11.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://leetcode.com/problems/di-string-match/

 

출처 : LeetCode

문제 설명
I와 D로 구성된 문자열 s가 주어집니다.

s[0] == I 이면 arr[0] < arr[1]  다음 원소보다 작아야 합니다.
s[1] == D 이면  arr[1] > arr[2] 다음 원소보다 커야 합니다.

 

풀이 방법
말로 설명이 어려워서 그림을 통해 설명
"IDID" 를 예시로 한 그림입니다.

I일 때 값을 넣고 증가시키기 위한 head 변수는 0부터 시작합니다.
D일 때 값을 넣고 감소시키기 위한 tail 변수는 s의 길이부터 시작합니다.

 

I 이면 head의 값을 return Array에 넣고 head+1

D 이면 tail의 값을 return Array에 넣고 tail-1

 

주어진 문자열만큼 반복하면, head와 tail은 입력하지 않은 한 원소를 공통적으로 가리킵니다.

마지막 남은 원소를 return Array 마지막에 삽입

 

 

내 코드(JAVA)

 

class Solution {
    public int[] diStringMatch(String s) {
        int[] res = new int[s.length()+1];
        int head = 0;
        int tail = s.length();
        
        for(int i=0; i<s.length(); i++) {
            char ch = s.charAt(i);
            res[i] = ch=='I' ? head++ : tail--;
        }
        
        // tail 값을 넣어도 상관 X, 안들어간 빈 값을 똑같이 가리킴
        res[s.length()] = head;
        
        return res;
    }
}

 

설명이 더 힘드네요.. 😂

 

 

 

 

 

728x90
반응형

댓글