일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 2017 카카오 코드
- 알고리즘
- 반복문
- pandas
- 최소공배수
- 보이어무어
- 어려웠던 문제
- 영문자 확인
- fragment identifier
- Dynamic Programming
- Java
- dfs
- 조합
- 완전 탐색
- 문자열
- 점프와 순간이동
- HashSet
- 순열
- 규칙찾기
- python
- 쿼드압축 후 개수세기
- HashMap
- 프로그래머스
- 튜플
- 완전탐색
- 동적계획법
- 에라토스테네스의 체
- 후위 표기법
- Stack
- 메뉴리뉴얼
- Today
- Total
csmoon1010의 SW 블로그
[201107] 짝지어 제거하기 - 2017 팁스타운(level2) 본문
0. 문제유형 : 적절한 자료구조 선택(Stack)
1. 문제이해
programmers.co.kr/learn/courses/30/lessons/12973
코딩테스트 연습 - 짝지어 제거하기
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙
programmers.co.kr
(1) 주요 요구사항
- String s : 알파벳 소문자로 이루어진 문자열
- 짝지어 제거하기
: 같은 알파벳이 2개 붙어 있는 짝 : 제거한 뒤, 앞뒤로 문자열을 이어 붙임
- 위 과정을 반복해 s가 빈 문자열이 된다면 1, 더 이상 제거되지 않는다면 0 return
(2) 제한사항
- 문자열 길이 : 1,000,000 이하의 자연수
- 모두 소문자로 이루어짐 : 대소문자 처리에 신경쓰지 않아도 됨
2. 전략
(1) 문자열 순차적으로 탐색 & Stack 자료구조 이용
- Stack의 특징 : LIFO(Last In First Out) 구조로 바로 직전의 요소를 확인하기 유용
→ 현재 탐색 중인 문자와 이전의 문자가 같은지 여부를 체크할 수 있음!!!
[자료구조]
- Stack<Character> stack = new Stack<>() : 문자열의 한 문자를 char형태로 push
[프로세스]
- 문자열 순회
① stack이 비어있지 않고(empty), stack의 상단 요소(peek)가 target 문자와 같다면 : 상단 요소 제거(pop)
② 그렇지 않다면 : target 요소 추가(push)
- stack이 비어있으면 1, 아니면 0 return
3. 참고사항
(1) 자료 구조의 선택
- 처음 나의 시도 : String의 substring과 인덱스를 통해 수행
→ 과정 복잡 & 시간복잡도 문제 발생
- 직전의 문자와의 비교에 집중하여 Stack 자료구조를 생각할 수 있어야 된다!!!
(2) 시간복잡도 : O(n)
- 문자열의 길이만큼 1번만 순회하면 된다.
4. 코드
import java.util.*;
class Solution
{
public int solution(String s)
{
int answer = 0;
//중복되면 제거 __ 적절한 자료구조 쓰기 - Stack(같은면 제거)
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
char target = s.charAt(i);
if(!stack.empty() && stack.peek() == target){
stack.pop();
}else{
stack.push(target);
}
}
if(stack.empty()) answer = 1;
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[201111] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT(level2) (0) | 2020.11.11 |
---|---|
[201109] 소수 만들기 - Summer/Winter Coding(~2018) (level2) (0) | 2020.11.10 |
[201106] 쿼드압축 후 개수 세기 - 월간 코드 챌린지 시즌1(level2) (0) | 2020.11.06 |
[201106] 수식 최대화 - 2020 카카오 인턴십(level2) (0) | 2020.11.06 |
[201105] 삼각 달팽이 - 월간 코드 챌린지 시즌1(level2) (0) | 2020.11.05 |