섹션3. 자료구조 활용 섹션 - (1)

728x90

🎈섹션3. 자료구조 활용 섹션 - (1)

🟦 3-1. 최대 길이 연속 수열

문제 풀이

코드 | 오류 났다.

  • 최초 시도 때 나는 arr[i+1]-arr[i] == 1 즉, 1씩 차이나는 값일 때만 카운팅++하고, 나머지는 continue로 지속한 뒤, Math.max()로 더 큰 cnt 값이 나타날 때 answer에 세팅해주면 되는 문제라고 생각했는데, 계속해서 오류가 났다.
package to_0428;
/* 3-1. 최대 길이 연속수열 
 * */
import java.util.*;
class Solution1 {
    public int solution(int[] nums){
        int answer = 0;
        int cnt = 0;
        //1) 정렬 해놓고
        Arrays.sort(nums); 
        for(int i=0; i<nums.length; i++) {
            if(nums[i+1] == nums[i]+1) {
                cnt++;
            }else {
                continue;
            }
            //여기서 현재의 cnt보다 더 큰 cnt를 세팅해주기
            answer = Math.max(answer, cnt);
        }

        return answer;
    }

    public static void main(String[] args){
        Solution1 T = new Solution1();
        System.out.println(T.solution(new int[]{8, 1, 9, 3, 10, 2, 4, 0, 2, 3}));
        System.out.println(T.solution(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0}));
        System.out.println(T.solution(new int[]{3, 3, 3, 3, 3, 3, 3, 3}));
        System.out.println(T.solution(new int[]{-3, -1, -2, 0, 3, 3, 5, 6, 2, 2, 1, 1}));
        System.out.println(T.solution(new int[]{-5, -3, -1, -4, 3, 3, 5, 6, 2, 2, 1, 1, 7}));
    }
}

완성 코드

package to_0428;
import java.util.*;
class Solution_Re {
    public int solution(int[] nums){
        int answer = 0;
        HashSet<Integer> set = new HashSet<>();
        //1) 중복 제거하기 
        for(int x:nums) set.add(x);
        //2)해쉬셋의 각 값 가져오면서
        for(int x: set) {
            //수열 시작하는 값인지 판별 (얘보다 -1값 존재하면 시작값 x
            if(set.contains(x-1)) continue;
            //만약 시작하는 값이면 
            int cnt=0;
            while(set.contains(x)) {
                cnt++;
                x++;
            }
            answer = Math.max(answer, cnt);
        }

        return answer;
    }

    public static void main(String[] args){
        Solution_Re T = new Solution_Re();
        System.out.println(T.solution(new int[]{8, 1, 9, 3, 10, 2, 4, 0, 2, 3}));
        System.out.println(T.solution(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0}));
        System.out.println(T.solution(new int[]{3, 3, 3, 3, 3, 3, 3, 3}));
        System.out.println(T.solution(new int[]{-3, -1, -2, 0, 3, 3, 5, 6, 2, 2, 1, 1}));
        System.out.println(T.solution(new int[]{-5, -3, -1, -4, 3, 3, 5, 6, 2, 2, 1, 1, 7}));
    }
}

🟦 3-2. 겹쳐진 압축 해제 **(RE) 다시 보기

문제 풀이

  • 괄호가 포함된 문자열을 입력 받기 때문에 stack을 사용해야 한다고 생각이 들었지만 , 생각보다 문제 해결하기가 어려웠다.

완성 코드

package to_0428;
/*3-2. 겹쳐진 압축 해제*/
import java.util.*;
class Solution2 {
    //솔루션 함수 
    public String solution(String s){
        String answer = "";

        Stack<String> st = new Stack<>();
        for(Character x : s.toCharArray()) {
            if(x == ')') {
                String tmp = "";
                while(!st.empty()) {
                    String c = st.pop();
                    if(c.equals("(")) {
                        String num = "";
                        while(!st.empty() && Character.isDigit(st.peek().charAt(0))) {
                            num = st.pop()+num;
                        }
                        String res = "";
                        int cnt = 0;
                        if(num.equals("")) cnt=1;
                        else cnt = Integer.parseInt(num);
                        for(int i=0; i<cnt; i++) res += tmp;
                        st.push(res);

                        break;
                    }

                    tmp = c+ tmp;
                }
            }
            else st.push(String.valueOf(x));
        }

        for(String o : st) answer += o;

        return answer;
    }
    //실행 메인 
    public static void main(String[] args){
        Solution2 T = new Solution2();
        System.out.println(T.solution("3(a2(b))ef"));
        System.out.println(T.solution("2(ab)k3(bc)"));
        System.out.println(T.solution("2(ab3((cd)))"));
        System.out.println(T.solution("2(2(ab)3(2(ac)))"));
        System.out.println(T.solution("3(ab2(sg))"));
    }
}

728x90