일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- java
- 11688
- 17087
- solved.ac
- SWEA
- 사용자정의필터
- 23971
- 1342
- 알고리즘
- 2866
- 20006
- 25379
- pccp
- PS
- 6730
- 장고
- 9081
- sloved.ac
- 자바
- Django
- 파이썬
- 라이브러리
- programmers
- Algorithm
- PYTHON
- 15965
- 백준
- 프로그래머스
- 24511
- sovled.ac
Archives
- Today
- Total
코깽이의 코딩일기
[ 프로그래머스 / JAVA / Level 2 ] 짝지어 제거하기 본문
반응형
제출한 코드
1차 제출 코드 - 정확성 61.2 , 효율성 0 ( 시간초과 )
import java.io.*;
import java.util.*;
class Solution
{
public int solution(String s)
{
int answer = -1;
if(s.length()%2 != 0){
return 0;
}
List<Character> list = new ArrayList<>();
for(int i = 0 ; i < s.length(); i ++){
list.add(s.charAt(i));
}
int idx = 0;
while(!list.isEmpty()){
if(list.get(idx) == list.get(idx+1)){
list.remove(idx+1);
list.remove(idx);
idx = 0;
}else{
idx++;
if(idx == list.size()-1){
break;
}
}
}
System.out.print(list.size());
if(list.size() == 0){
return 1;
}else{
return 0;
}
}
}
2차 제출한 코드 - 정확성 61.2 , 효율성 38.8
import java.io.*;
import java.util.*;
class Solution
{
public int solution(String s)
{
int answer = -1;
// 홀수인 경우 반드시 실패
if(s.length()%2 != 0){
return 0;
}
// 비교를 위해서 Deque 2개 선언
Deque<Character> left = new ArrayDeque<>();
Deque<Character> right = new ArrayDeque<>();
// right deque에 데이터 준비
for(int i = 1 ; i < s.length(); i ++){
right.add(s.charAt(i));
}
// right이 빌 때 까지 진행
while(!right.isEmpty()){
// 왼쪽에 비교용 데이터가 없는 경우 right에서 1개 삽입
if(left.isEmpty()){
left.add(right.poll());
}
// 연속되는 알파벳인지 확인을 위한 값 준비
char leftData = left.pollLast();
char rightData = right.poll();
// 연속 되는 경우 continue
if(leftData == rightData){
continue;
}
// 연속 되지 않는 경우 left에 둘다 추가
else{
left.add(leftData);
left.add(rightData);
}
}
// left가 비어있으면 성공
if(left.isEmpty()){
return 1;
}else{
return 0;
}
}
}
생각한 로직
1. 빠른 연산을 위해서 ArrayList, LinkedList가 아닌 Deque 사용
2. 2개가 연속되는지 확인을 위해 left, right를 구분하기 위해서 Deque를 2개 만든다.
3. right에 입력 값을 준비한다.
4. left의 마지막 값과 right의 맨 처음 값을 비교하면서 연속되는지 확인한다.
5. 연속 되지 않는 경우 left에 값을 전부 추가
6. left와 right둘다 empty인 경우 성공
반응형
'PS > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 / JAVA / Level 1 ] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.06.13 |
---|---|
[ 프로그래머스 / JAVA / Level 2 ] 점프와 순간 이동 (0) | 2024.06.08 |
[ 프로그래머스 / JAVA / Level 2 ] 다음 큰 숫자 (1) | 2024.05.30 |
[ 프로그래머스 / JAVA / Level 2 ] 숫자의 표현 (0) | 2024.05.29 |
[ 프로그래머스 / JAVA / Level 3 ] 가장 먼 노드 (0) | 2024.05.28 |