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
'알고리즘 이론 [개념] > [개념] 코테 알고리즘 공부 - 시즌 2' 카테고리의 다른 글
섹션3. 자료구조 활용 섹션 -(3) (0) | 2023.05.02 |
---|---|
섹션3. 자료구조 활용 섹션 -(2) (0) | 2023.05.01 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (4) (0) | 2023.04.27 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (3) (0) | 2023.04.26 |
섹션2. 해싱 & 시간 파싱 알고리즘 - (2) (0) | 2023.04.24 |