Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- createSlice
- programmers
- 알고리즘
- react-redux
- json-server
- JavaScript
- Python
- react
- java
- SW
- redux
- Algorithm
- 테코테코
- 항해플러스
- 프로그래머스
- Get
- 이코테
- redux-saga
- sw expert academy
- react-router
- 리액트
- redux-toolkit
- 자바
- 매일메일
- useDispatch
- C++
- axios
- 코딩테스트합격자되기
- maeil-mail
- 항해99
Archives
- Today
- Total
Binary Journey
[코딩테스트합격자되기-자바편] 문제11. 짝지어 제거하기 본문
반응형
💡 해당 풀이는 코딩 테스트 합격자되기 - 자바편 에서 발췌된 내용을 바탕으로 작성되었습니다.
문제
출처 : 프로그래머스 - 짝지어 제거하기
내용
알파벳 소문자로 구성된 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 짝을 찾은 다음에는 그 둘을 제거한 뒤 앞뒤 문자열을 이어 붙입니다.
이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S
가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성하세요. 성공적으로 수행할 수 있으면 1
을, 아닐 경우 0
을 반환해주면 됩니다.
예를 들어, 문자열 S = baabaa
라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
제약 조건
- 문자열의 길이 : 1,000,000이하의 자연수
- 문자열은 모두 소문자로 이루어져 있습니다.
기록하기
💡 어디까지 생각해봤는지 단계적으로 기록해봅니다.
어떤 알고리즘을 적용하려 했나요?
스택을 사용한다.
적용 근거는 무엇인가요?
문자열 길이가 1,000,000이하의 자연수이어서 시간 복잡도가 O(N^2)이 되면 안될 것 같다.replace()
를 사용하거나 이중 반복문을 사용할 경우 시간초과가 일어날 가능성이 있다.
풀이
풀이 시간
시작 시각 | 종료 시각 | 총 소요 시간 |
---|---|---|
16:42 | 16:53 | 11분 |
문제 분석
제약 사항 파악 & 테스트 케이스 작성
- 문자열의 길이 : 1,000,000이하의 자연수
- 문자열은 모두 소문자로 이루어져 있습니다.
입력값 분석
💡 입력값을 분석하면 문제에서 요구하는 알고리즘의 시간 복잡도를 간접적으로 파악할 수 있습니다.
s | result |
---|---|
baabaa | 1 |
cdcd | 0 |
의사 코드 작성
💡 의사 코드는 동작 중심으로 작성하는 것이 중요합니다.
💡 의사 코드는 문제 해결 순서로 작성합니다.
💡 의사 코드를 충분히 테스트해봅니다.
solution() {
// 1. stack 생성
// for문
for (s) {
// stack 이 비어있으면 삽입 후 continue
// stack 이 안 비어있으면 꺼낸 뒤 같은지 비교
// 안 같으면 stack에 삽입
}
return stack 비어있으면 1 비어있지 않으면 0
}
구현
import java.util.Stack;
class Solution
{
public int solution(String s)
{
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (stack.isEmpty()) {
stack.push(s.charAt(i));
continue;
}
char prev = stack.peek();
if (prev == s.charAt(i)) {
stack.pop();
} else {
stack.push(s.charAt(i));
}
}
return stack.isEmpty() ? 1 : 0;
}
}
복기하기
저자 권장 시간 | 권장 시간 복잡도 |
---|---|
30분 | O(N) |
답안과 나의 풀이를 비교해보세요
import java.util.Stack;
class Solution
{
public int solution(String s)
{
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (!stack.isEmpty() && stack.peek() == s.charAt(i)) {
stack.pop();
} else {
stack.push(s.charAt(i));
}
}
return stack.isEmpty() ? 1 : 0;
}
}
- 코드 한 번 더 다듬을 걸. 아쉽다.
요약하기
- 문제를 보고 스택인지 떠올리려면 많이 풀어보는 수밖에..
반응형
'Algorithm > 코딩테스트합격자되기-자바편' 카테고리의 다른 글
[코딩테스트합격자되기-자바편] 문제13. 크레인 인형뽑기 게임 (1) | 2025.01.08 |
---|---|
[코딩테스트합격자되기-자바편] 문제12. 주식가격 (1) | 2025.01.08 |
[코딩테스트합격자되기-자바편] 문제10. 괄호 회전하기 (2) | 2025.01.04 |
[코딩테스트합격자되기-자바편] 문제09. 10진수를 2진수로 변환하기 (0) | 2025.01.04 |
[코딩테스트합격자되기-자바편] 문제08. 올바른 괄호 (0) | 2025.01.04 |